Memmove在同一指针中删除多个空白C



当此代码工作时:

 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…….bb"(点是空格)->"aaa-bbb")

谢谢。

类似的声明

char *k = "asd";

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

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

char k[] = "asd";

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

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

语句

memmove(k,k+1,3);  

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

最新更新