getline, getwline, getdelim, getwdelim
| Definido en el archivo de encabezado <stdio.h>
|
||
ssize_t getline(char **punterolinea, size_t *n, FILE *canal); |
(1) | (memoria dinamica TR) |
ssize_t getwline(wchar_t **punterolinea, size_t *n, FILE *canal); |
(2) | (memoria dinamica TR) |
ssize_t getdelim(char ** restrict punterolinea, size_t * restrict n, int delimitador, FILE *canal); |
(3) | (memoria dinamica TR) |
ssize_t getwdelim(wchar_t ** restrict punterolinea, size_t * restrict n, wint_t delimitador, FILE * canal); |
(4) | (memoria dinamica TR) |
getdelim(punterolinea, n, '\n', canal)getwdelim(punterolinea, n, L'\n', canal)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.
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 |
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.
Observaciones
Estas funciones son idénticas a sus versiones POSIX excepto que está permitido, pero no es necesario configurar 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 *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:
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 stdinOriginal: reads a character string from stdinThe 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) |