fgets
Get a line from a stream
Contents
Interface
#include <stdio.h>
char | fgets (char * restrict str, int size, FILE * restrict stream) |
char | gets (char *str) |
Description
The fgets function reads at most one less than the number of characters specified bysize
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. 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 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.
Example:
Example - Get a line from a stream
Workings
#include <stdio.h> int main() { // open the text file "fred.txt" for writing FILE *out = fopen("fred.txt", "wt"); // write some text to the file fprintf(out, "Hello Fred!\n"); // close the stream, so all changes to the file are saved fclose(out); // open the file "fred.txt" for reading FILE *in = fopen("fred.txt", "rt"); // read the first line from the file char buffer[100]; fgets(buffer, 20, in); // display what we've just read printf("first line of \"fred.txt\": %s\n", buffer); // close the stream fclose(in); return 0; }
Solution
Output:
first line of "fred.txt": Hello Fred!
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, and callers must use reference:ferror to determine which occurred.Errors
EBADF | The given \c stream is not a readable stream. |