getline, getwline, getdelim, getwdelim
|
Défini dans l'en-tête
<stdio.h>
|
||
| (1) | (dynamic memory TR) | |
| (2) | (dynamic memory TR) | |
| (3) | (dynamic memory TR) | |
| (4) | (dynamic memory TR) | |
stream
comme par
fgetc
, jusqu'à ce que le
delimiter
soit rencontré, en stockant les caractères dans le tampon de taille
*n
pointé par
*lineptr
, en augmentant automatiquement sa taille comme par
realloc
pour accommoder l'entrée complète, y compris le délimiteur, et en ajoutant un terminateur nul. Le pointeur retourné par
realloc
est réécrit dans
*lineptr
.
*lineptr
peut être nul, auquel cas la valeur précédente de
*n
est ignorée et
getline
alloue un nouveau tampon comme par
malloc
. Dans tous les cas, la longueur finale du tampon alloué est écrite dans
*n
. Le comportement est indéfini si
delimiter
a une valeur en dehors de la plage de
unsigned char
ou de
EOF
.
delimiter
doit être un
wchar_t
valide ou
WEOF
.
Si
*lineptr
n'est pas nul, le comportement est indéfini si
*lineptr
n'est pas un pointeur qui peut être passé à
free
ou si
*n
est supérieur à la taille de la mémoire allouée pointée par
*lineptr
. Le comportement est également indéfini si
n
n'est pas un pointeur valide approprié pour écrire une valeur de type
size_t
.
Comme toutes les fonctions du TR sur la mémoire dynamique,
getline
n'est garantie d'être disponible que si
__STDC_ALLOC_LIB__
est défini par l'implémentation et si l'utilisateur définit
__STDC_WANT_LIB_EXT2__
à la constante entière
1
avant d'inclure
stdio.h
.
Table des matières |
Paramètres
| lineptr | - | pointeur vers un pointeur vers le tampon initial ou vers un pointeur nul |
| n | - | pointeur vers la taille du tampon initial |
| delimiter | - | caractère délimiteur |
| stream | - | flux d'entrée valide, ouvert par fopen |
Valeur de retour
Le nombre de caractères stockés dans le tampon, incluant le délimiteur, mais excluant le terminateur nul.
En cas d'erreur, retourne
-
1
et positionne
feof
ou
ferror
sur
stream
.
Notes
Ces fonctions sont identiques à leurs versions POSIX sauf qu'il est permis, mais non obligatoire de définir errno en cas d'erreur.
Exemple
#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(); }
Sortie :
Continue? [y] n:
Voir aussi
|
obtient une chaîne de caractères depuis un flux de fichier
(fonction) |
|
|
(supprimé en C11)
(C11)
|
lit une chaîne de caractères depuis
stdin
(fonction) |
|
(C95)
|
obtient une chaîne large depuis un flux de fichier
(fonction) |
|
alloue de la mémoire
(fonction) |