作者:知乎用户
链接:https://www.zhihu.com/question/28191923/answer/40028231
来源:知乎
C语言标准规定数组的值可以改变,而修改字符串字面量的值的结果是未定义的(详见分割线后,感谢 @Sunchy321 指正)。char s[LEN]和char *s这两个s不是一种东西。这个问题编译器的具体实现一般是这样的:
char s[10] = "whatever";
也相当于
char s[10] = {
'w','h','a','t','e','v','e',</

C语言标准禁止修改字符串字面量,这会导致未定义行为。字符数组与指针不同,前者在栈上分配并可修改,后者可能指向只读数据段。编译器通常将字符串字面量存储在只读段,尝试修改会触发保护机制。然而,某些编译器优化可能导致多个指针共享同一存储,修改一例可能影响所有。
最低0.47元/天 解锁文章
1824

被折叠的 条评论
为什么被折叠?



