fgets
|
Definido 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 ocurre el fin de 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 .
Contenidos |
Parámetros
| str | - | puntero a un elemento de un arreglo de caracteres |
| count | - | número máximo de caracteres a escribir (normalmente 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 fallo.
Si se encuentra la condición de fin de archivo, establece el indicador eof en stream (ver feof() ). Esto solo constituye un fallo si provoca que no se lean bytes, en cuyo caso se retorna un puntero nulo y los contenidos del array apuntado por str no se alteran (es decir, el primer byte no se sobrescribe con un carácter nulo).
Si el fallo ha sido causado por algún otro error, establece el indicador de error (ver ferror() ) en stream . Los contenidos del array apuntado por str son indeterminados (puede que ni siquiera esté terminado en nulo).
Notas
POSIX adicionalmente 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 sí lo hacen
- si count < 1 , no hacer nada, reportar error,
- si count == 1 ,
-
- algunas implementaciones no hacen nada, reportan error,
- otras no leen nada, almacenan cero en str [ 0 ] , reportan é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 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 a un flujo de archivo
(función) |
|
|
(dynamic memory TR)
|
lee desde un flujo hacia un búfer de tamaño automático hasta delimitador/fin de línea
(función) |
|
Documentación de C++
para
fgets
|
|