Namespaces
Variants

fgets

De es.cppreference.net
< c | io
 
 
Entrada/salida de archivos
Tipos y objetos
        
Funciones
Acceso a archivos
(C95)
Entrada/salida sin formato
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Entrada formateada
Entrada/salida directa
Salida formateada
Posicionamiento de archivos
Manejo de errores
Operaciones sobre archivos
 
Definida en el encabezado <stdio.h>
char* fgets( char* str, int count, FILE* stream );
(hasta C99)
char* fgets( char* restrict str, int count, FILE* restrict stream );
(desde C99)

Lee como máximo count - 1 caracteres del flujo de archivo dado y los almacena en el arreglo de caracteres apuntado por str. El análisis se detiene si se encuentra un carácter de nueva línea (en cuyo caso str contendrá ese carácter de nueva línea) o si se alcanza el final del archivo. Si se leen bytes y no ocurren errores, escribe un carácter nulo en la posición inmediatamente después del último carácter escrito en str.

Parámetros

str - puntero a un elemento de un arreglo char
count - número máximo de caracteres a escribir (típicamente la longitud de str)
stream - flujo de archivo desde el cual leer los datos

Valor de retorno

str en caso de éxito, puntero nulo en caso de error.

Si se encuentra la condición de fin de archivo, establece el indicador eof en stream (véase feof()). Esto solo es un error si provoca que no se lean bytes, en cuyo caso se devuelve un puntero nulo y el contenido del arreglo apuntado por str no se modifica (es decir, el primer byte no se sobrescribe con un carácter nulo).

Si el error ha sido causado por otro error, establece el indicador error (véase ferror()) en stream. El contenido del arreglo apuntado por str es indeterminado (puede que ni siquiera tenga terminación nula).

Notas

POSIX además requiere que fgets establezca errno si ocurre un error de lectura.

Aunque la especificación estándar es poco clara en los casos donde count <= 1, las implementaciones comunes hacen

  • si count < 1, no hacer nada, informar error,
  • si count == 1,
  • algunas implementaciones no hacen nada, informan error,
  • otras no leen nada, almacenan cero en str[0], informan éxito.

Ejemplo

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    FILE* tmpf = tmpfile();
    fputs("Alan Turing\n", tmpf);
    fputs("John von Neumann\n", tmpf);
    fputs("Alonzo Church\n", tmpf);
 
    rewind(tmpf);
    
    char buf[8];
    while (fgets(buf, sizeof buf, tmpf) != NULL)
          printf("\"%s\"\n", buf);

    if (feof(tmpf))
       puts("End of file reached");
}

Salida:

"Alan Tu"
"ring
"
"John vo"
"n Neuma"
"nn
"
"Alonzo "
"Church
"
End of file reached

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.21.7.2 La función fgets (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.21.7.2 La función fgets (p: 241)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.21.7.2 La función fgets (p: 331)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.19.7.2 La función fgets (p: 296)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.9.7.2 La función fgets

Véase también

lee la entrada formateada desde stdin, un flujo de archivo o un búfer
(función)
(eliminado en C11)(C11)
lee una cadena de caracteres desde stdin
(función)
escribe una cadena de caracteres en un flujo de archivo
(función)
(memoria dinámica TR)
lee de un flujo a un búfer redimensionado automáticamente hasta el delimitador/fin de línea
(función)