gpt4 book ai didi

c - 尝试访问 C 中字符串上的字符时出现总线错误

转载 作者:IT王子 更新时间:2023-10-29 00:56:06 25 4
gpt4 key购买 nike

我已经多次使用这行代码(更新:当字符串是函数的参数时!),但是当我现在尝试这样做时,我得到了一个总线错误(gcc 和 clang 都出现了)。我正在重现尽可能简单的代码;

char *string = "this is a string";
char *p = string;
p++;
*p='x'; //this line will cause the Bus error
printf("string is %s\n",string);

为什么我无法使用 p 指针更改字符串的第二个字符?

最佳答案

您正在尝试修改只读内存(存储字符串文字的地方)。如果您需要修改该内存,则可以改用 char 数组。

char str[] = "This is a string";
str[0] = 'S'; /* works */

I have used this line of code many times..

我当然希望不会。充其量你会得到一个段错误(我说“充其量”是因为尝试修改只读内存是未指定的行为,在这种情况下任何事情都可能发生,而崩溃是可能发生的最好的事情)。

当您声明一个指向字符串文字的指针时,它指向数据段中的只读内存(如果您愿意,请查看汇编输出)。将您的类型声明为 char[] 会将文字复制到函数的堆栈中,这将允许在需要时对其进行修改。

关于c - 尝试访问 C 中字符串上的字符时出现总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4129188/

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