【发布时间】:2023-04-06 09:38:01
【问题描述】:
考虑这个定义:
char *pmessage = "now is the time";
在我看来,pmessage 将指向内存中包含这些字符的连续区域,最后是'\0'。所以我从中得出,只要我在这个区域的范围内,我就可以使用指针算法来访问这个字符串中的单个字符。
那么为什么他们说 (K&R) 修改单个字符是未定义的?
此外,为什么我在运行以下代码时会出现“Segmentation Fault”?
*(pmessage + 1) = 'K';
【问题讨论】:
-
那么,如果我们这样定义,为什么可以修改字符串: char amessage[] = "now is the time";使用这个:message[1] = 'K'; ?有什么区别?
-
SIGSEGV 是当您执行 K&R 认为未定义的事情时可能发生的事情之一。
-
@Leif:在这种情况下,您不会修改字符串文字本身。您已在当前范围内定义了一个字符数组,并要求编译器确保该数组已初始化为某个字符串。你可以随意修改你的数组,因为它没有被声明为 const。
-
标准C/C++ docs.sun.com/source/819-3689/Ch3.Std.html#23706987654321@的解释