可能重复:
Difference between char *str="STRING" and char str[] = "STRING"?
Need some help with C programming
此剪辑会出现分段错误
int main(void) {
char* str ="abcde";
str[strlen(str)-1] ='\0';
printf("%s",str);
return 0;
}
如果我放
char str [] ="abcde";
而不是完美运作的指针,你知道为什么会这样吗?
答案 0 :(得分:8)
当您编写char *str = "abcde";
时,您会创建一个指向字符串文字的char
指针,但您不能修改该字符串。
当您编写char str[] = "abcde";
时,您创建一个char
数组并将字符串文字复制到其中。这只是一个普通的char
数组,因此您可以自由修改它。
修改字符串文字是未定义的行为。这是一个深思熟虑的设计决策,允许将字符串文字放在输出程序的特殊只读部分。在实践中,许多编译器和平台都这样做(将其标记为只读意味着您只需要在内存中只有一个字符串副本,即使程序运行的实例不止一个)。这会导致您在平台上观察到的行为。
答案 1 :(得分:2)
char *str = "abcde";
str
是指向字符串文字的char的指针。字符串文字存储在只读存储器中。你无法修改它们。
char str[] = "abcde";
将字符串文字"abcde"
复制到数组str
中。所以你可以修改它。
答案 2 :(得分:1)
char *
是指向char(字符串文字)的指针,char []
是char数组。您无法修改字符串文字,但可以修改字符数组。