将指针的元素分配给同一指针中的另一个元素

时间:2016-10-04 12:01:28

标签: c arrays string pointers string-literals

我试图从指针中分配一个元素,该元素与同一个指针中的另一个元素的值相同。

int testFunc() {
    char *p = "123";
    p[0] = p[2];
    return 0;
}

很好奇为什么上面的代码不起作用 - 以及实现我想要做的事情的最佳方式是什么?

3 个答案:

答案 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”;

当您定义这样的指针时,它会将数据保存在只读内存段中,这就是您无法修改数据的原因