FGETS(3) BSD Library Functions Manual FGETS(3)
NAME
fgets, gets -- get a line from a stream
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <stdio.h>
char *
fgets(char *restrict s, int n, FILE *restrict stream);
char *
gets(char *s);
DESCRIPTION
The fgets() function reads at most one less than the number of characters specified by n from the given
stream and stores them in the string s. Reading stops when a newline character is found, at end-of-file end-offile
file or error. The newline, if any, is retained. If any characters are read and there is no error, a
`\0' character is appended to end the string.
The gets() function is equivalent to fgets() with an infinite n 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.
RETURN VALUES
Upon successful completion, fgets() and gets() return a pointer to the string. If end-of-file occurs
before any characters are read, they return NULL and the buffer contents remain unchanged. If an error
occurs, they return NULL and the buffer contents are indeterminate. The fgets() and gets() functions
do not distinguish between end-of-file and error; callers must use feof(3) and ferror(3) to determine
which occurred.
ERRORS
[EBADF] The given 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).
SECURITY CONSIDERATIONS
The gets() function cannot be used securely. Because of its lack of bounds checking, and the inability
for the calling program to reliably determine the length of the next incoming line, the use of this
function enables malicious users to arbitrarily change a running program's functionality through a
buffer overflow attack. It is strongly suggested that the fgets() function be used in all cases. (See
the FSA.)
SEE ALSO
feof(3), ferror(3), fgetln(3), fgetws(3)
STANDARDS
The functions fgets() and gets() conform to ISO/IEC 9899:1999 (``ISO C99'').
BSD June 4, 1993 BSD
|