fgets
| 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
(C11)(C11)(C11) |
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) |
Documentación de C++ para fgets
| |