这两根弦有什么不同?
What is the difference between these two strings?
PART 1
我有两个字符串,它们以以下方式定义-
char s1[] = "foo";
char *s2 = "foo";
当我试图改变这些字符串中的一个字符时,比如,第二个字符-
char s1[1] = 'x';
char s2[1] = 'x';
字符串s1
中的字符更改,但更改字符串s2
中的字符会给我这个错误- Segmentation fault (core dumped)
。
为什么会这样?
为什么我不能改变以另一种方式定义的字符串的字符?
第2部分
字符串(它们是字符数组,对吧?)可以使用- char *s = "foo"
初始化但为什么编译器给出警告,当我试图初始化不同类型的数组使用相同的东西,如int *arr = {1, 2, 3}
?
foo.c: In function ‘main’:
foo.c:5:5: warning: initialization makes pointer from integer without a cast [enabled by default]
foo.c:5:5: warning: (near initialization for ‘foo’) [enabled by default]
foo.c:5:5: warning: excess elements in scalar initializer [enabled by default]
foo.c:5:5: warning: (near initialization for ‘foo’) [enabled by default]
foo.c:5:5: warning: excess elements in scalar initializer [enabled by default]
foo.c:5:5: warning: (near initialization for ‘foo’) [enabled by default]
注意:我的编译器是GCC。
第一个是字符串,它是一个字符数组,由字符串"foo"中的字符填充,第二个是指向值为"foo"的常量指针。因为第二个是常数,所以不允许修改它。
不,你不能将指针初始化为一组值——因为指针没有实际的内存来存储赋给它的值。你需要让它指向另一个数组:
int foox[3] = { 1, 2, 3 };
int *foo = foox;
或者你需要分配一些内存,然后存储这些值:
int *foo = malloc(sizeof(int) * 3);
foo[0] = 1;
foo[1] = 2;
foo[2] = 3;
相关文章:
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 比较两个节点坐标的最佳方法是什么?
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 两种访问I2C总线的方法有什么区别?
- 两种模板示例有什么区别?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 这两种C++语法之间有什么区别?
- C++ 参考:这两个语句有什么区别?
- 这两个C++语句连接字符串有什么区别?
- 提升图库示例 凯文培根的六度:示例中的 Vertex() 是什么
- C++指针中的这两种类型的值分配有什么区别?
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 如果我使用同一个密钥推送用户数据两次,会发生什么
- 这两张魔法卡的最高技能是什么
- 这两根弦有什么不同?
- 两根弦之间的距离