用于删除多个空格C的同一指针中的Memmove

时间:2015-03-19 15:00:00

标签: c pointers removing-whitespace memmove

虽然本规范有效:

 char * k = "asd"; 
 char * j = malloc(sizeof(char) * 3);
 memmove(j,k,3);
 printf("%s",j);

代码出错:

 char * k = "asd";
 char * j = malloc(sizeof(char) * 3);
 memmove(k,k+1,3);
 printf("%s",k); // output should be "sd"

我在想错吗?为什么它给了一个erorr?我打算用它来删除多个空格(“aaa ....... bbb”(点是空格) - >“aaa bbb”)

谢谢。

3 个答案:

答案 0 :(得分:1)

这样的宣言
char *k = "asd";

使字符串文字存储在只读数据段中。 (由于历史原因,即使将指针声明为const char *k = "asd"会更安全,C编译器也不会对此情况发出警告。)

如果您希望字符串内容可以修改,则需要使用数组,例如

char k[] = "asd";

答案 1 :(得分:0)

声明

memmove(k,k+1,3);  

尝试将字符串文字asd的元素移动1。字符串文字是不可修改的。任何修改它的尝试都会调用未定义的行为。

答案 2 :(得分:0)

执行char *k = "asd"时,字符串"asd"被放置在内存的只读部分中,指针k指向那里。您无法使用memmove()写入此位置。

您应该使用char k[] = "asd"