c - Memmove in same pointer for delete multiple whitespaces C

标签 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"

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

谢谢。

最佳答案

像这样的声明

char *k = "asd";

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

如果你希望字符串内容可以修改,你需要使用数组来代替,比如

char k[] = "asd";

关于c - Memmove in same pointer for delete multiple whitespaces C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29147998/

相关文章:

C 程序无法运行

c - 进程中的特定线程是否可以创建多个作业?

C 中的完整类型到不完整类型 : C11 standard

c - 删除链接列表中的项目 - 程序无法运行

c - 如果 p 是指向 int 的指针,那么在哪里使用 &p

c - 释放时出现三重指针错误

C 堆栈指向地址?

python - 仅从输出中删除尾随空格

r - 如何修剪前导和尾随空白?

c - 如何修复 C 中类型不匹配和尾随空格的错误