加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组和指向字符串文字的指针之间的差异

发布时间:2020-12-16 09:49:10 所属栏目:百科 来源:网络整理
导读:我是C的新手,所以这可能是一个愚蠢的问题.我正在编写一段代码如下: char ar[]="test";*(ar+1)='r'; 这工作正常.但无论何时我这样做: char *p="test";*(p+1)="r"; 这是分段错误.任何人都可以描述为什么第二种情况会给出分段错误?从记忆的角度来解释将不胜
我是C的新手,所以这可能是一个愚蠢的问题.我正在编写一段代码如下:

char ar[]="test";

*(ar+1)='r';

这工作正常.但无论何时我这样做:

char *p="test";

*(p+1)="r";

这是分段错误.任何人都可以描述为什么第二种情况会给出分段错误?从记忆的角度来解释将不胜感激.

解决方法

在第二种情况下,p指向字符串文字并且不允许修改字符串文字,它是 undefined behavior.从 C99 draft standard部分6.4.5字符串文字第6段(强调我的):

It is unspecified whether these arrays are distinct provided their elements have the
appropriate values. If the program attempts to modify such an array,the behavior is
undefined
.

在第一种情况下,ar是一个自动变量,你可以修改它,因为它不是const限定的.在初始化或ar期间复制字符串文字的内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读