Namespaces
Variants

getline, getwline, getdelim, getwdelim

From cppreference.net
Défini dans l'en-tête <stdio.h>
ssize_t getline ( char ** lineptr, size_t * n, FILE * stream ) ;
(1) (dynamic memory TR)
ssize_t getwline ( wchar_t ** lineptr, size_t * n, FILE * stream ) ;
(2) (dynamic memory TR)
ssize_t getdelim ( char ** restrict lineptr, size_t * restrict n,
int delimiter, FILE * stream ) ;
(3) (dynamic memory TR)
ssize_t getwdelim ( wchar_t ** restrict lineptr, size_t * restrict n,
wint_t delimiter, FILE * stream ) ;
(4) (dynamic memory TR)
1) Se comporte comme getdelim ( lineptr, n, ' \n ' , stream )
2) Se comporte comme getwdelim ( lineptr, n, L ' \n ' , stream )
3) Lit depuis le flux 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 .
4) Identique à (3) , sauf que les caractères sont lus comme si par fgetwc et que le 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)