我已经多次使用这行代码(更新:当字符串是函数的参数时!),但是当我现在尝试这样做时,我收到总线错误(无论是使用 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 str[] = "This is a string";
str[0] = 'S'; /* works */
我已经多次使用这行代码了..
我当然希望不会。最多你会得到一个段错误(我说“最好”是因为尝试修改只读内存是未指定的行为,在这种情况下任何事情都可能发生,而崩溃是可能发生的最好的事情)。
当您声明一个指向字符串文字的指针时,它指向数据段中的只读内存(如果您愿意,请查看汇编输出)。将您的类型声明为 char[] 会将该文字复制到函数的堆栈上,这反过来又允许在需要时对其进行修改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)