#include<stdio.h>
void main()
{
char *p="nyks";
p[2]='n';
printf("%s",p);
}
Run Code Online (Sandbox Code Playgroud)
这会导致SEGMENTATION FAULT崩溃.有人可以解释原因吗?
Mat*_*hen 15
尝试覆盖字符串文字是未定义的行为.C99§6.4.5/ 6:
如果程序试图修改这样的数组,则行为未定义.
这在附录J.2(未定义的行为)中重申.
如果您改为:
char p[] = "nyks";
Run Code Online (Sandbox Code Playgroud)
您可以分配和初始化自动(堆栈)字符数组.在这种情况下,修改元素是完全正确的.
标准规定了文字字符串的定义const.你无法改变它.
编译器将文字放在只读内存部分.您可以输出组件并观察它.如果您使用GCC,则通过-s标志完成.它会将字符串放在.rodata节中.
| 归档时间: |
|
| 查看次数: |
625 次 |
| 最近记录: |