getline, getwline, getdelim, getwdelim
|
Definiert in Header
<stdio.h>
|
||
| (1) | (dynamic memory TR) | |
| (2) | (dynamic memory TR) | |
| (3) | (dynamic memory TR) | |
| (4) | (dynamic memory TR) | |
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.
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) |