[英]Confusion about strcat with memcpy
好的,所以我已經看到了memcpy的strcat函數的一些實現。 我知道這是有效的,因為不需要分配。 但是如何保留用結果字符串覆蓋源字符串的內容。
例如讓-
char *str1 = "Hello";
char *str2 = "World";
str1 = strcat(str1, str2);
如何確保在str2
中不會被生成的“ HelloWorld”字符串的內容覆蓋?
另外,如果字符串不過是char數組而已,並且數組應該具有固定的大小,那么如果我將比數組大的字節復制到數組中,則無需重新分配內存,那不是不安全嗎?
我知道這是有效的,因為不需要分配。
這是一個錯誤的理解。 memcpy
和strcat
都不分配內存。 兩者都要求您傳遞指向足夠數量的有效內存的指針。 如果不是這種情況,該程序將受到未定義的行為的影響。
您發布的代碼會受到不確定的行為的影響,原因如下:
str1
指向字符串文字,它位於程序的只讀部分。
str1
沒有足夠的內存來容納字符串"HelloWorld"
和終止的空字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.