Namensräume
Varianten
Aktionen

getline, getwline, getdelim, getwdelim

Von cppreference.com
Definiert in Header <stdio.h>
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
(1) (Dynamischer Speicher-TR)
ssize_t getwline(wchar_t **lineptr, size_t *n, FILE *stream);
(2) (Dynamischer Speicher-TR)
ssize_t getdelim(char ** restrict lineptr, size_t * restrict n,
                 int delimiter, FILE *stream);
(3) (Dynamischer Speicher-TR)
ssize_t getwdelim(wchar_t ** restrict lineptr, size_t * restrict n,
                 wint_t delimiter, FILE * stream);
(4) (Dynamischer Speicher-TR)
1) Entspricht getdelim(lineptr, n, '\n', stream)
2) Entspricht getwdelim(lineptr, n, L'\n', stream)
3) Liest aus dem Stream stream, als ob mit fgetc, bis delimiter angetroffen wird, wobei die Zeichen im Puffer der Größe *n, auf den *lineptr zeigt, gespeichert werden. Die Größe wird automatisch, als ob mit realloc, erhöht, um die gesamte Eingabe, einschließlich des Trennzeichens, aufzunehmen und eine Nullterminierung hinzuzufügen. *lineptr kann null sein, in diesem Fall wird *n ignoriert und getline weist einen neuen Puffer zu, als ob mit malloc. Das Verhalten ist undefiniert, wenn delimiter einen Wert hat, der außerhalb des Bereichs von unsigned char oder EOF liegt.
4) Gleiche wie (3), außer dass die Zeichen gelesen werden, als ob mit fgetwc, 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 kleiner ist als die Größe des von *lineptr verwiesenen Speicherbereichs.

Wie alle Funktionen aus dem Dynamic Memory TR ist getline nur dann garantiert verfügbar, wenn __STDC_ALLOC_LIB__ von der Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT2__ vor dem Einbinden von stdio.h auf die ganzzahlige Konstante 1 setzt.

Inhalt

[edit] Parameter

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

[edit] Rückgabewert

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

Bei einem Fehler wird -1 zurückgegeben und feof oder ferror für stream gesetzt.

[edit] Anmerkungen

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

[edit] 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:

[edit] Siehe auch

liest einen Zeichenstring aus einem Dateistream
(Funktion) [bearbeiten]
(entfernt in C11)(C11)
liest einen Zeichenstring aus stdin
(Funktion) [bearbeiten]
(C95)
liest einen Weitzeichenstring aus einem Dateistream
(Funktion) [bearbeiten]
alloziert Speicher
(Funktion) [bearbeiten]