C 语言字符串用数组和指针初始化为什么会有这样的区别?
直接用数组初始化:
#include <stdio.h>
int main(void) {
char str[] = "abc";
int i = 0;
while (str[i] != '\0') {
printf("%c\n", str[i]);
i++;
}
str[1] = 'd';
return 0;
}
没有问题,正常输出,没有报错。
但是如果用指针初始化:
#include <stdio.h>
int main(void) {
char *str = "abc";
int i = 0;
while (str[i] != '\0') {
printf("%c\n", str[i]);
i++;
}
str[1] = 'd';
return 0;
}
它执行到
str[1] = 'd'
的时候,就会报 segmentation fault,我在网上搜了一下,
都是说通过指针初始化的字符串是个常量,不能改变。感觉这个很坑啊,只是
char str[] = "abc"
和
char *str = "abc";
这样小的区别而已,为什么通过指针初始化的那个就要是常量呢?是 C 语言规定就是这样,还是是可以理解的?
女神凌波丽
9 years, 3 months ago