No, fgets
is not actually deprecated in C99 or the current standard, C11. But the author of that tutorial is right that fgets
will not stop when it encounters a NUL, and has no mechanism for reporting its reading of such a character.
The fgets
function reads at most one less than the number of characters specified by n
from the stream pointed to by stream
into the array pointed to by s
. No additional characters are read after a new-line character (which is retained) or after end-of-file.
(§7.21.7.2)
GNU's getdelim
and getline
have been standardized in POSIX 2008, so if you're targeting a POSIX platform, then it might not be a bad idea to use those instead.
EDIT I thought there was absolutely no safe way to use fgets
in the face of NUL characters, but R.. (see comments) pointed out there is:
char buf[256];
memset(buf, '
', sizeof(buf)); // fgets will never write a newline
fgets(buf, sizeof(buf), fp);
Now look for the last non-
character in buf
. I wouldn't actually recommend this kludge, though.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…