Namespaces
Variants

getline, getwline, getdelim, getwdelim

From cppreference.net
Definiert in Header <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) Verhält sich wie getdelim ( lineptr, n, ' \n ' , stream )
2) Verhält sich wie getwdelim ( lineptr, n, L ' \n ' , stream )
3) Liest aus dem Stream stream wie durch fgetc , bis delimiter angetroffen wird, speichert die Zeichen im Puffer der Größe *n auf den *lineptr zeigt, vergrößert automatisch dessen Größe wie durch realloc um die gesamte Eingabe einschließlich des Delimiters aufzunehmen, und fügt einen Null-Terminator hinzu. Der von realloc zurückgegebene Zeiger wird in *lineptr zurückgeschrieben. *lineptr kann null sein, in diesem Fall wird der vorherige Wert von *n ignoriert und getline weist einen neuen Puffer zu wie durch malloc . In jedem Fall wird die endgültige Länge des zugewiesenen Puffers in *n geschrieben. Das Verhalten ist undefiniert, wenn delimiter einen Wert außerhalb des Bereichs von unsigned char oder EOF hat.
4) Gleich wie (3) , außer dass die Zeichen wie durch fgetwc gelesen werden und dass delimiter ein gültiges wchar_t oder WEOF sein muss.

Wenn *lineptr nicht null ist, ist das Verhalten undefiniert, wenn *lineptr kein Zeiger ist, der an free übergeben werden kann, oder wenn *n größer als die Größe des von *lineptr referenzierten allokierten Speichers ist. Das Verhalten ist ebenfalls undefiniert, wenn n kein gültiger Zeiger ist, der zum Schreiben eines Werts vom Typ size_t geeignet ist.

Wie alle Funktionen aus dem Dynamic Memory TR ist getline nur garantiert verfügbar, wenn __STDC_ALLOC_LIB__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT2__ auf den Integer-Konstantenwert 1 setzt, bevor stdio.h eingebunden wird.

Inhaltsverzeichnis

Parameter

lineptr - Zeiger auf einen Zeiger auf den initialen Puffer oder auf einen Nullzeiger
n - Zeiger auf die Größe des initialen Puffers
delimiter - das Trennzeichen
stream - gültiger Eingabestrom, geöffnet durch fopen

Rückgabewert

Die Anzahl der im Puffer gespeicherten Zeichen, einschließlich des Trennzeichens, jedoch ohne den Nullterminator.

Bei Fehler wird - 1 zurückgegeben und feof oder ferror auf stream gesetzt.

Hinweise

Diese Funktionen sind identisch mit ihren POSIX-Versionen , außer dass es erlaubt, aber nicht erforderlich ist, errno bei einem Fehler zu setzen.

Beispiel

#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();
}

Ausgabe:

Continue? [y] n:

Siehe auch

liest eine Zeichenkette aus einem Dateistrom
(Funktion)
(entfernt in C11) (C11)
liest eine Zeichenkette von stdin
(Funktion)
(C95)
liest eine Breitzeichenkette aus einem Dateistrom
(Funktion)
reserviert Speicher
(Funktion)