char
*
fgets(
char * restrict str
, int size
, FILE * restrict stream
)
char
*
gets(
char *str
)
)
function
reads at most one less than the number of characters specified by
size
from the given
stream
and stores them in the string
str
.
Reading stops when a newline character is found,
at end-of-file or error.
The newline, if any, is retained, and a
`\0'
character is appended to end the string.
The
gets()
function
is equivalent to
fgets(
)
with an infinite
size
and a
stream
of
stdin,
except that the newline character (if any) is not stored in the string.
It is the caller's responsibility to ensure that the input line,
if any, is sufficiently short to fit in the string.
)
and
gets(
)
return
a pointer to the string.
If end-of-file or an error occurs before any characters are read,
they return
NULL
.
The
fgets(
)
and
gets(
)
functions
do not distinguish between end-of-file and error, and callers must use
feof(3)
and
ferror(3)
to determine which occurred.
EBADF
]
stream
is not a readable stream.
The function
fgets()
may also fail and set
errno
for any of the errors specified for the routines
fflush(3),
fstat(2),
read(2),
or
malloc(3).
The function
gets()
may also fail and set
errno
for any of the errors specified for the routine
getchar(3).
)
and
gets(
)
conform to
ANSI X3.159-1989 (``ANSI C89'') .
char buf[1024], *p;
while (fgets(buf, sizeof(buf), fp) != NULL) {
if ((p = strchr(buf, '\n')) == NULL) {
fprintf(stderr, "input line too long.\n");
exit(1);
}
*p = '\0';
printf("%s\n", buf);
}
While the error would be true if a line > 1023 characters were read, it would be false in two other cases:
)
will not contain a newline either.
Thus
strchr(
)
will return
NULL
and the program will terminate, even if the line was valid.
),
correctly assume the end of the string is represented by a null
(`\0')
character.
If the first character of a line returned by
fgets(
)
were null,
strchr(
)
would immediately return without considering the rest of the returned text
which may indeed include a newline.
Consider using fgetln(3) instead when dealing with untrusted input.
).
The
gets(
)
function
exists purely to conform to
ANSI X3.159-1989 (``ANSI C89'') .