gpt4 book ai didi

c - 关于 C 中的字符指针

转载 作者:太空狗 更新时间:2023-10-29 15:09:43 24 4
gpt4 key购买 nike

考虑这个定义:

char *pmessage = "now is the time";

如我所见,pmessage 将指向内存中的一个连续区域,其中包含这些字符和末尾的 '\0'。所以我从中得出,只要我在这个区域的限制内,我就可以使用指针算法来访问这个字符串中的单个字符。

那么为什么他们说 (K&R) 修改单个字符是未定义的?
此外,为什么当我运行以下代码时,会出现“Segmentation Fault”?

*(pmessage + 1) = 'K';

最佳答案

C 中的字符串文字是不可修改的。字符串文字是在程序源代码中定义的字符串。编译器经常将字符串文字存储在已编译二进制文件的只读部分中,因此实际上您的 pmessage 指针位于您无法修改的该区域中。存在于可修改内存中的缓冲区中的字符串可以使用上面的语法进行修改。

尝试这样的事情。

const char* pmessage = "now is the time";

// Create a new buffer that is on the stack and copy the literal into it.
char buffer[64];
strcpy(buffer, pmessage);

// We can now modify this buffer
buffer[1] = 'K';

如果您只想要一个可以修改的字符串,则可以避免使用具有以下语法的字符串文字。

char pmessage[] = "now is the time";

此方法直接将字符串创建为堆栈上的数组,并且可以就地修改。

关于c - 关于 C 中的字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/752401/

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