簡體   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