2010-10-13 4 views

Répondre

3

Oui. En plus de passer 1 (comme noté par Ignacio), fgets ne fait aucune manipulation spéciale pour les nulls incorporés. Donc, si le prochain caractère dans le FILE * est NUL, strlen sera 0. C'est une des raisons pour lesquelles je préfère la fonction POSIX getline. Il renvoie le nombre de caractères lus afin que les NULL incorporés ne posent pas de problème.

4

De la page man fgets(3):

DESCRIPTION

fgets() reads in at most one less than size characters from stream and 
    stores them into the buffer pointed to by s. Reading stops after an 
    EOF or a newline. If a newline is read, it is stored into the buffer. 
    A '\0' is stored after the last character in the buffer. 

...

VALEUR DE RETOUR

...

gets() and fgets() return s on success, and NULL on error or when end 
    of file occurs while no characters have been read. 

De là, on peut déduire qu'une size de 1 le fera lire une chaîne vide. L'expérimentation ici le confirme.

Incidemment, un size de 0 semble ne pas modifier du tout le tampon, même en mettant dans \0.

+0

+1, cela semble correct. – casablanca

+0

si la taille de la mémoire tampon est nulle, il n'y a pas de place pour 'fgets()' pour écrire le terminal null, n'est-ce pas? Il ne peut pas écrire au-delà de la fin de l'espace qui lui est donné; si on ne lui donne pas d'espace, il ne peut pas écrire. –