4
考慮此代碼:是否strncat()總是空終止?
limit = sizeof(str1)-strlen(str1)-1;
strncat(str1,str2,limit);
如果str2
長度大於limit
更大,並strncat
訥終止str1
或我要在strncpy
的情況下,添加以下代碼,怎麼樣?
str1[sizeof(str1)-1] = '\0'
考慮此代碼:是否strncat()總是空終止?
limit = sizeof(str1)-strlen(str1)-1;
strncat(str1,str2,limit);
如果str2
長度大於limit
更大,並strncat
訥終止str1
或我要在strncpy
的情況下,添加以下代碼,怎麼樣?
str1[sizeof(str1)-1] = '\0'
它總是空終止。
引用C11
,章§7.24.3.2,(重點煤礦)
的
strncat
功能追加不超過n
字符(空字符及其後面的不附加 字符)從s2
指向的數組到 的末尾,由s1
指向的字符串。s2
的首字符覆蓋s1
末尾 處的空字符。 終止空字符總是附加到結果。
和,腳註
因此,可以在陣列中最終的最大字符數由
s1
指向是strlen(s1)+n+1
。
你確定'str1'是數組類型的,對不對? –
沒有錯,不完整。你__had__提到'str1'是一個數組。 –
如何聲明'str1'?我們可以猜測,但請注意,不熟悉這些可能問題的人會使用您的代碼,並且......會出現問題。實際上,如果'str1'是一個char *',你的代碼將會失敗(可能非常驚人)。 – usr2564301