1 #include<stdio.h>
2 main(){
3 char* str = "string";
4 *str = 'k';
5 printf("string is = %s\n",str);
6 }
此程序编译时没有任何错误或警告,但是当我运行它时,它会给出分段错误。如果我将第3行重写为:char str [] =“string”;这个程序工作得很好。任何人都可以让我知道这里有什么问题???编写第3行的这两种不同方式之间有什么区别。任何帮助将不胜感激。感谢。
答案 0 :(得分:7)
char* str = "string";
这会将字符串放在只读内存中。当您尝试使用下一行修改它时,它是未定义的行为(通常是令人不快的行为)。尝试像
这样的东西char str[] = "string";
代替。
答案 1 :(得分:2)
char * str = "string";
声明一个指针,指向存储字符串"string"
的内存区域;在这个内存区域写入是未定义的行为,它通常会导致崩溃。
相反,你应该使用:
char str[]="string";
声明函数的局部字符串,初始化为值"string"
。由于您用于此字符串的内存是您的过程的本地内存,因此您可以随意更改它。
答案 2 :(得分:0)
I also executed the given code..
1 #include<stdio.h>
2 main(){
3 char* str = "string";
4 *str = 'k';
5 printf("string is = %s\n",str);
6 }
But there is no such error.
Following output is shown....
String is=Ktring
A segmentation fault, bus error, or access violation is generally an attempt
to access memory that the CPU cannot physically address. So in my opinion it's
completely depends on execution.
thanks...