2017-01-14 1 views
4

Vu ce code:Est-ce que strncat() always null se termine?

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

Si str2 la longueur est supérieure à limit, ne strncatstr1 ou met fin à Nul je dois ajouter ce code, comme dans le cas de strncpy?

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

Vous vous assurez que 'str1' est de type tableau, non? –

+0

pas faux, incomplet. Vous avez __had__ pour mentionner que 'str1' est un tableau. –

+0

Comment 'str1' est-il déclaré? Nous pouvons deviner, mais sachez que quelqu'un qui n'est pas familier avec les problèmes possibles utilisera votre code et ... aura des problèmes. Comme c'est le cas, votre code échouera (peut-être spectaculairement) si 'str1' est un' char * '. – usr2564301

Répondre

5

Il est toujours terminé par un caractère nul.

C11 Citant, chapitre §7.24.3.2, (Souligné par)

La fonction strncatpas plus ajoute que n caractères (un caractère nul et caractères qui le suivent ne sont pas ajoutés) à partir du tableau pointé par s2 jusqu'à la fin de la chaîne pointée par s1. Le caractère initial de s2 remplace le caractère null à et s1. Un caractère nul final est toujours ajouté au résultat.

et, la note

Ainsi, le nombre maximum de caractères qui peuvent se retrouver dans le tableau pointé par s1 est strlen(s1)+n+1.