Namespaces
Variants

std:: fgets

From cppreference.net
< cpp ‎ | io ‎ | c
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)