getline, getwline, getdelim, getwdelim
|
Definido en el encabezado
<stdio.h>
|
||
| (1) | (TR de memoria dinámica) | |
| (2) | (TR de memoria dinámica) | |
| (3) | (TR de memoria dinámica) | |
| (4) | (TR de memoria dinámica) | |
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
.
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) |