繁体   English   中英

内存在同一指针中,用于删除多个空格C

[英]Memmove in same pointer for deleting multiple whitespaces 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"

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

谢谢。

像这样的声明

char *k = "asd";

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

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

char k[] = "asd";

该声明

memmove(k,k+1,3);  

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM