getline, getwline, getdelim, getwdelim
Definido en el archivo de encabezado <stdio.h>
|
||
(1) | (memoria dinamica TR) | |
(2) | (memoria dinamica TR) | |
(3) | (memoria dinamica TR) | |
(4) | (memoria dinamica TR) | |
canal
como si fuera fgetc, hasta que se encuentra el delimitador
, almacenando los caracteres en el búfer de tamaño *n
apuntado por *punterolinea
, aumentando automáticamente su tamaño como si fuera por realloc para que se ajuste a toda la entrada, incluyendo el delimitador, y añadiendo un terminador nulo. *punterolinea
puede ser nulo, en cuyo caso *n
es ignorado y getline
asigna un nuevo búfer como si fuera por malloc. El comportamiento es indefinido si el delimitador
tiene un valor que está fuera del rango de caracteres sin signo o EOF.delimitador
debe ser un wchar_t
o WEOF válido.Si *punterolinea
no es nulo, el comportamiento es indefinido si *punterolinea
no es un puntero que puede ser pasado a free o si *n
es menor que el tamaño de la memoria asignada apuntada por *punterolinea
Como todas las funciones de la memoria dinámica TR, getline
sólo se garantiza que está disponible si __STDC_ALLOC_LIB__ se define mediante la implementación y si el usuario define __STDC_WANT_LIB_EXT2__ a la constante entera 1 antes de incluir stdio.h
.
Contenido |
[editar] Parameters
punterolinea | - | puntero a un puntero al búfer inicial o a un puntero nulo |
n | - | puntero al tamaño de la memoria inicial |
delimitador | - | el carácter delimitador |
canal | - | canal de entrada válido, abierto por fopen |
[editar] Return value
El número de caracteres almacenados en el búfer, incluyendo el delimitador, pero excluyendo el terminador nulo.
En caso de error, retorna -1 y establece feof o ferror en canal
.
[editar] Observaciones
Estas funciones son idénticas a sus versiones POSIX excepto que está permitido, pero no es necesario configurar errno en caso de error.
[editar] 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 *respuesta = NULL; size_t len; printf("¿Continuar? [s] n: "); if((getline(&respuesta, &len, stdin) < 0) || (len && respuesta[0] == 'n')) { free(respuesta); exit(0); } free(respuesta); return; } int main(void) { get_y_or_n(); }
Salida:
¿Continuar? [s] n:
[editar] Véase también
recibe una cadena de caracteres a partir de una secuencia de archivo Original: gets a character string from a file stream The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función) | |
lee una cadena de caracteres de stdin Original: reads a character string from stdin The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función) | |
obtiene una cadena amplia de una secuencia de archivo Original: gets a wide string from a file stream The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función) | |
asigna memoria (función) |