我试图从指针中分配一个元素,该元素与同一个指针中的另一个元素的值相同。
int testFunc() {
char *p = "123";
p[0] = p[2];
return 0;
}
很好奇为什么上面的代码不起作用 - 以及实现我想要做的事情的最佳方式是什么?
答案 0 :(得分:4)
您正面临此问题,因为您正在尝试修改调用string literal的 undefined behavior 。
问题在于
p[0] = p[2];
而p
指向字符串文字。
引用C11
,章节§6.4.5,字符串文字
[...]如果程序试图修改这样的数组,行为是 未定义。
你需要有一个数组,能够修改内容,比如
char parr[] = "123";
然后
parr[0] = parr[2];
会做的。
答案 1 :(得分:1)
当您编写char *p = "123"
时,p
指向只读内存的4个字符的第一个元素。实际上你应该编写const char* p = "123"
来引发语句p[0] = p[2];
上的编译时失败。
如果要修改字符串,请使用自动存储持续时间;即写
char[] p = "123";
p
则为char[4]
类型,最终元素为nul-terminator。
答案 2 :(得分:0)
char * p =“123”;
当您定义这样的指针时,它会将数据保存在只读内存段中,这就是您无法修改数据的原因