Read a string from a stream


#include <stdio.h>

char* fgets( char* buf, 
             int n, 
             FILE* fp );


A pointer to a buffer in which fgets() can store the bytes that it reads.
The maximum number of bytes to read.
The stream from which to read the string.



Use the -l c option to qcc to link against this library. This library is usually included automatically.


The fgets() function reads a string of bytes from the stream specified by fp, and stores them in the array specified by buf.

It stops reading bytes when:

The newline character isn't discarded. A null character is placed immediately after the last byte read into the array.

Note: Don't assume that there's a newline character in every string that you read with fgets(). A newline character isn't present if there are more than n-1 bytes before the newline.

Also, a newline character might not appear as the last byte in a file when the end-of-file is reached.


The same pointer as buf, or NULL if the stream is at the end-of-file or an error occurs (errno is set).

Note: Use feof() or ferror() to distinguish an end-of-file condition from an error.


#include <stdio.h>
#include <stdlib.h>

int main( void )
    FILE *fp;
    char buffer[80];
    char *ret;

    fp = fopen( "file", "r" );
    if (fp == NULL) {
        perror ("fopen()");
        return EXIT_FAILURE;

    while (1) {
        ret = fgets( buffer, 80, fp );
        if (ret == NULL) {
            if (feof( fp )) {
                // We're at the end of the file.
                return EXIT_SUCCESS;
            } else {
                // An error occurred.
                perror ("fgets()");
                return EXIT_FAILURE;
        fputs( buffer, stdout );


ANSI, POSIX 1003.1

Cancellation point Yes
Interrupt handler No
Signal handler No
Thread Yes

See also:

errno, feof(), ferror(), fopen(), fputs(), getc(), gets(), fgetc()