首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组和指向字符串文字的指针的区别

数组和指向字符串文字的指针的区别
EN

Stack Overflow用户
提问于 2013-11-30 04:50:56
回答 3查看 237关注 0票数 3

我对C不熟悉,所以这可能是个愚蠢的问题。我在写一段代码,如下所示:

代码语言:javascript
复制
char ar[]="test";

*(ar+1)='r';

这很好用。但每当我这么做的时候

代码语言:javascript
复制
char *p="test";

*(p+1)="r";

这就产生了分割错误。有谁能描述一下为什么第二种情况会产生分割错误?从记忆的角度进行解释将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-30 04:51:51

在第二种情况下,p指向字符串文本,您不允许修改字符串文本,它是未定义行为。来自C99标准草案6.4.5字符串字面值的第6段(强调我的意思):

如果这些数组的元素具有适当的值,则未指定这些数组是否不同。如果程序试图修改这样的数组,则行为为未定义的

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

票数 5
EN

Stack Overflow用户

发布于 2013-11-30 05:22:40

在c#中,每当您将字符串存储在数组中时,都可以允许更改字符串的内容。这样做的原因是,c将字符串的内容存储在连续内存中。

在指针的情况下,指针存储字符串的起始地址,并假定它是常量。假设你试图改变它。您得到一个未定义的行为,甚至更糟糕的情况是,您不能轻易地找到它,仅仅因为它不会抛出任何错误。

票数 1
EN

Stack Overflow用户

发布于 2013-11-30 06:23:41

示例'r‘== 114 (可能)的另一个方面,而"r“==是可执行文件中const字符串"r”的起始地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20296674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档