gpt4 book ai didi

c - 数组和指向字符串文字的指针之间的区别

转载 作者:太空狗 更新时间:2023-10-29 16:01:54 24 4
gpt4 key购买 nike

我是 C 的新手,所以这可能是个愚蠢的问题。我正在写一段代码,如下所示:

char ar[]="test";

*(ar+1)='r';

这工作正常。但每当我这样做时:

char *p="test";

*(p+1)="r";

这是段错误。谁能描述为什么第二种情况会出现段错误?从内存的角度解释将不胜感激。

最佳答案

在第二种情况下,p 指向一个字符串 并且您不能修改字符串,它是 undefined behavior 。从 C99 draft standard 部分 6.4.5 String literals 段落 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 期间被复制。

关于c - 数组和指向字符串文字的指针之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20296674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com