std:: fgets
|
Definido en el encabezado
<cstdio>
|
||
|
char
*
fgets
(
char
*
str,
int
count,
std::
FILE
*
stream
)
;
|
||
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 un 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 para 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 std::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 std::ferror() ) en stream . El contenido del array apuntado por str es indeterminado (puede que ni siquiera esté terminado en nulo).
Notas
POSIX adicionalmente requiere
que
fgets
establezca
errno
si encuentra un error diferente a la condición de fin de archivo.
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 <cstdio> #include <cstdlib> #include <iomanip> #include <iostream> #include <span> void dump(std::span<const char> buf, std::size_t offset) { std::cout << std::dec; for (char ch : buf) std::cout << (ch >= ' ' ? ch : '.'), offset--; std::cout << std::string(offset, ' ') << std::hex << std::setfill('0') << std::uppercase; for (unsigned ch : buf) std::cout << std::setw(2) << ch << ' '; std::cout << std::dec << '\n'; } int main() { std::FILE* tmpf = std::tmpfile(); std::fputs("Alan Turing\n", tmpf); std::fputs("John von Neumann\n", tmpf); std::fputs("Alonzo Church\n", tmpf); std::rewind(tmpf); for (char buf[8]; std::fgets(buf, sizeof buf, tmpf) != nullptr;) dump(buf, 10); }
Salida:
Alan Tu. 41 6C 61 6E 20 54 75 00 ring..u. 72 69 6E 67 0A 00 75 00 John vo. 4A 6F 68 6E 20 76 6F 00 n Neuma. 6E 20 4E 65 75 6D 61 00 nn..uma. 6E 6E 0A 00 75 6D 61 00 Alonzo . 41 6C 6F 6E 7A 6F 20 00 Church.. 43 68 75 72 63 68 0A 00
Véase también
|
lee entrada formateada desde
stdin
, un flujo de archivo o un búfer
(función) |
|
|
(obsoleto en C++11)
(eliminado en C++14)
|
lee una cadena de caracteres desde
stdin
(función) |
|
escribe una cadena de caracteres a un flujo de archivo
(función) |
|
|
Documentación de C
para
fgets
|
|