C语言 字符串 指针 修改字面量

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

作者:知乎用户
链接: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',</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值