簡體   English   中英

關於strcat與memcpy的混淆

[英]Confusion about strcat with memcpy

好的,所以我已經看到了memcpy的strcat函數的一些實現。 我知道這是有效的,因為不需要分配。 但是如何保留用結果字符串覆蓋源字符串的內容。

例如讓-

char *str1 = "Hello";
char *str2 = "World";

str1 = strcat(str1, str2);

如何確保在str2中不會被生成的“ HelloWorld”字符串的內容覆蓋?

另外,如果字符串不過是char數組而已,並且數組應該具有固定的大小,那么如果我將比數組大的字節復制到數組中,則無需重新分配內存,那不是不安全嗎?

這不是不安全 ,而是不確定的行為

首先,您嘗試修改一個字符串常量 ,它固有地調用UB。

其次,關於目標緩沖區的大小,引用手冊頁強調我的

所述strcat()函數追加 src字符串到dest串,覆蓋終止空字節( '\\0'在結束時) dest ,然后添加終止空字節。 字符串可能不會重疊, 並且dest字符串必須具有足夠的空間以容納結果。 如果dest不夠大,則程序行為是不可預測的; [...]

我知道這是有效的,因為不需要分配。

這是一個錯誤的理解。 memcpystrcat都不分配內存。 兩者都要求您傳遞指向足夠數量的有效內存的指針。 如果不是這種情況,該程序將受到未定義的行為的影響。

您發布的代碼會受到不確定的行為的影響,原因如下:

  1. str1指向字符串文字,它位於程序的只讀部分。

  2. str1沒有足夠的內存來容納字符串"HelloWorld"和終止的空字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM