2017-01-14 4 views
4

str2長さがlimitより大きい場合strncat()は常にnull終了しますか?このコード考慮

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

は、strncat NULはstr1を終了しないか、私はstrncpyの場合と同様に、このコードを追加する必要がありますか?

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

'str1'は配列型であることを確認してください。 –

+0

間違っていない、不完全です。あなたは 'str1'が配列であることに言及すると__had__します。 –

+0

'str1'はどのように宣言されていますか?推測することはできますが、考えられる問題に精通していない人がコードを使用して問題を解決することに注意してください。そのままですが、 'str1'が' char * 'ならばあなたのコードは(恐らく壮大に)失敗します。 – usr2564301

答えて

5

常にNULL終了します。

C11、章§7.24.3.2、(強調鉱山

を引用strncat機能がない以上n文字以内を(それに続くヌル文字と 文字が追加されていない)を追加s2が指す配列から の末尾までs1が指す文字列。 s2の最初の文字は、 末尾のヌル文字をs1に上書きします。 終了ヌル文字は常に結果に追加されます。

と、脚注

したがって、アレイに終わることができる文字の最大数は、s1によって指さが strlen(s1)+n+1あります。

関連する問題