2017-01-14 47 views
4

考慮此代碼:是否strncat()總是空終止?

limit = sizeof(str1)-strlen(str1)-1; 
strncat(str1,str2,limit); 

如果str2長度大於limit更大,並strncat訥終止str1或我要在strncpy的情況下,添加以下代碼,怎麼樣?

str1[sizeof(str1)-1] = '\0' 
+0

你確定'str1'是數組類型的,對不對? –

+0

沒有錯,不完整。你__had__提到'str1'是一個數組。 –

+0

如何聲明'str1'?我們可以猜測,但請注意,不熟悉這些可能問題的人會使用您的代碼,並且......會出現問題。實際上,如果'str1'是一個char *',你的代碼將會失敗(可能非常驚人)。 – usr2564301

回答

5

它總是空終止。

引用C11,章§7.24.3.2,(重點煤礦

strncat功能追加不超過n字符(空字符及其後面的不附加 字符)從s2指向的數組到 的末尾,由s1指向的字符串。 s2的首字符覆蓋s1末尾 處的空字符。 終止空字符總是附加到結果。

和,腳註

因此,可以在陣列中最終的最大字符數由s1指向是 strlen(s1)+n+1