Namespaces
Variants

getline, getwline, getdelim, getwdelim

From cppreference.net
Definido en el encabezado <stdio.h>
ssize_t getline ( char ** lineptr, size_t * n, FILE * stream ) ;
(1) (TR de memoria dinámica)
ssize_t getwline ( wchar_t ** lineptr, size_t * n, FILE * stream ) ;
(2) (TR de memoria dinámica)
ssize_t getdelim ( char ** restrict lineptr, size_t * restrict n,
int delimiter, FILE * stream ) ;
(3) (TR de memoria dinámica)
ssize_t getwdelim ( wchar_t ** restrict lineptr, size_t * restrict n,
wint_t delimiter, FILE * stream ) ;
(4) (TR de memoria dinámica)
1) Se comporta como getdelim ( lineptr, n, ' \n ' , stream )
2) Se comporta como getwdelim ( lineptr, n, L ' \n ' , stream )
3) Lee del flujo stream como si fuera mediante fgetc , hasta encontrar el delimiter , almacenando los caracteres en el búfer de tamaño *n apuntado por *lineptr , incrementando automáticamente su tamaño como si fuera mediante realloc para ajustarse a toda la entrada, incluyendo el delimitador, y añadiendo un terminador nulo. El puntero devuelto por realloc se escribe de nuevo en *lineptr . *lineptr puede ser nulo, en cuyo caso se ignora el valor previo de *n y getline asigna un nuevo búfer como si fuera mediante malloc . En cualquier caso, la longitud final del búfer asignado se escribe en *n . El comportamiento es indefinido si delimiter tiene un valor que está fuera del rango de unsigned char o EOF .
4) Igual que (3) , excepto que los caracteres se leen como si fuera mediante fgetwc y que el delimiter debe ser un wchar_t válido o WEOF .

Si *lineptr no es nulo, el comportamiento es indefinido si *lineptr no es un puntero que pueda pasarse a free o si *n es mayor que el tamaño de la memoria asignada apuntada por *lineptr . El comportamiento también es indefinido si n no es un puntero válido adecuado para escribir un valor de tipo size_t .

Como todas las funciones del TR de Memoria Dinámica, getline solo se garantiza que esté disponible si __STDC_ALLOC_LIB__ está definido por la implementación y si el usuario define __STDC_WANT_LIB_EXT2__ a la constante entera 1 antes de incluir stdio.h .

Contenidos

Parámetros

lineptr - puntero a un puntero al búfer inicial o a un puntero nulo
n - puntero al tamaño del búfer inicial
delimiter - el carácter delimitador
stream - flujo de entrada válido, abierto por fopen

Valor de retorno

El número de caracteres almacenados en el buffer, incluyendo el delimitador, pero excluyendo el terminador nulo.

En caso de error, retorna - 1 y establece feof o ferror en stream .

Notas

Estas funciones son idénticas a sus versiones POSIX excepto que está permitido, pero no requerido, establecer errno en caso de error.

Ejemplo

#ifdef __STDC_ALLOC_LIB__
#define __STDC_WANT_LIB_EXT2__ 1
#else
#define _POSIX_C_SOURCE 200809L
#endif
#include <stdio.h>
#include <stdlib.h>
void get_y_or_n(void)
{
    char *response = NULL;
    size_t len;
    printf("Continue? [y] n: ");
    if((getline(&response, &len, stdin) < 0) || (len && response[0] == 'n')) {
        free(response);
        exit(0);
    }
    free(response);
    return;
}
int main(void) 
{
    get_y_or_n();
}

Salida:

Continue? [y] n:

Véase también

obtiene una cadena de caracteres de un flujo de archivo
(función)
(eliminado en C11) (C11)
lee una cadena de caracteres desde stdin
(función)
(C95)
obtiene una cadena ancha de un flujo de archivo
(función)
asigna memoria
(función)