第1部分
我有 2 个字符串,它们以下列方式定义 -
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。