Kar*_*and 0 c segmentation-fault
可能重复:
为什么这个Seg Fault?
在char*上使用++运算符时收到分段错误
#include<stdio.h>
int main()
{
char *s = "hello";
printf("%c ", ++(*s));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但如果我做以下事情:
#include<stdio.h>
int main()
{
char *s = "hello";
char c = *s;
printf("%c ", ++c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后代码编译完美,上面的代码有什么问题?
第一个代码片段试图将字符串文字中的字符修改为:
++(*s)
Run Code Online (Sandbox Code Playgroud)
试图增加第一个字符s.字符串文字(通常)是只读的,尝试修改将导致分段错误(C标准状态如果程序试图修改这样的数组,则行为未定义.).
第二个片段正在修改一个char变量,该变量在以下情况下不是只读的:
char c = *s;
Run Code Online (Sandbox Code Playgroud)
c是一个复制的第一个字符的s和c可以安全地递增.
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |