fgets
lit les caractères du flux et les écrit dans le tampon jusqu'à ce que le tampon soit presque plein ou qu'il trouve un '\n'
(il renvoie NULL si l'opération échoue).
Vous pouvez donc savoir combien de characeters ont été lus (y compris le '\n'
) avec strlen
...
ret = fgets(buffer, sizeof buffer, stdin);
if (ret == NULL) /* deal with error */;
chars = strlen(buffer);
Maintenant, l'une des 2 choses ont peut-être hapenned: soit un '\n'
a été lu avant que le tampon a plein ou le buffer gor complet avant la lecture d'un '\n'
. Vous pouvez savoir qui était en examinant le dernier caractère dans la mémoire tampon
if (buffer[chars - 1] == '\n') /* full line read */;
else /* incomplete line */;
Notez que chars
est toujours (*) 1 ou plus, donc l'expression buffer[chars - 1]
est ok. (*) Il peut s'agir de 0 uniquement avec des données binaires pour l'entrée, mais cela interdit l'utilisation de strlen
et d'autres fonctions de chaîne.