如果我们声明char * p="hello";
那么由于它被写入数据部分,我们无法修改p指向的内容,但我们可以修改指针本身。但我在 C Traps and Pitfalls 中找到了这个例子
安德鲁·科尼格
AT&T贝尔实验室
默里山, 新泽西州 07974
例子是
char *p, *q;
p = "xyz";
q = p;
q[1] = ’Y’;
q 将指向包含字符串 xYz 的内存。 p 也是如此,因为 p 和 q 指向同一内存。
如果我提到的第一个陈述也是正确的,那它又如何呢?
同样我运行了以下代码
main()
{
char *p="hai friends",*p1;
p1=p;
while(*p!='\0') ++*p++;
printf("%s %s",p,p1);
}
并得到输出为ibj!gsjfoet
请解释一下在这两种情况下我们如何能够修改内容?
提前致谢
您的相同示例会导致我的系统出现分段错误。
您在这里遇到了未定义的行为。.data
(请注意,字符串文字可能位于.text
也)不一定是不可变的 - 不能保证机器会写保护该内存(通过页表),具体取决于操作系统和编译器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)