用char指针中的memmove替换字符

时间:2013-09-22 13:25:14

标签: c++ c string pointers

我试图理解为什么会这样:

char myst1r[] = "hello\n";
memmove(myst1r   , myst1r + 1 , 1 );//results in "eello"

而这一个:

char *mystr = "hello\n";
memmove(mystr , mystr + 1 , 1 );

导致“访问冲突写入位置”错误。 myst1rmystr都不指向char缓冲区的第一个成员?我在这里想念什么?

2 个答案:

答案 0 :(得分:4)

myst1rchar数组,其中包含初始值设定项的副本mystr是{strong>指针指向char,指向其初始值设定项。在这两种情况下,初始化程序都是文字字符串。区别在于您可以修改数组的内容,但不能修改文字字符串的内容。

答案 1 :(得分:2)

h e l l o \0
0 1 2 3 4 5

代码

memmove(myst1r, myst1r + 1, 1 )

将地点1(e)处的字符复制到0处。eello

至于第二个例子

char *mystr = "hello\n";

mystr这是一个字符串文字,修改它会导致C和C ++中的未定义行为。

只需注意一点,使用memcpy替换memmove将无效,因为前两个参数重叠。