![](/img/trans.png)
[英]For deleting a node in a linked list if I use memmove() (in C) will it be more efficient?
[英]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.