名稱空間
變體
操作

getline, getwline, getdelim, getwdelim

來自 cppreference.com
< c‎ | experimental‎ | dynamic
定義於標頭檔案 <stdio.h>
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
(1) (動態記憶體 TR)
ssize_t getwline(wchar_t **lineptr, size_t *n, FILE *stream);
(2) (動態記憶體 TR)
ssize_t getdelim(char ** restrict lineptr, size_t * restrict n,
                 int delimiter, FILE *stream);
(3) (動態記憶體 TR)
ssize_t getwdelim(wchar_t ** restrict lineptr, size_t * restrict n,
                 wint_t delimiter, FILE * stream);
(4) (動態記憶體 TR)
1) 行為類似於 getdelim(lineptr, n, '\n', stream)
2) 行為類似於 getwdelim(lineptr, n, L'\n', stream)
3) 從流 stream 中讀取字元,如同透過 fgetc,直到遇到 delimiter,將字元儲存在 *lineptr 指向的、大小為 *n 的緩衝區中,並自動增加其大小,如同透過 realloc,以適應整個輸入,包括分隔符,並新增一個空終止符。*lineptr 可以為 null,在這種情況下,*n 被忽略,並且 getline 分配一個新緩衝區,如同透過 malloc。如果 delimiter 的值超出 unsigned charEOF 的範圍,則行為未定義。
4)(3) 相同,只是字元的讀取方式如同透過 fgetwc,並且 delimiter 必須是有效的 wchar_tWEOF

如果 *lineptr 不為 null,則如果 *lineptr 不是可以傳遞給 free 的指標,或者如果 *n 小於 *lineptr 指向的已分配記憶體的大小,則行為未定義。

作為動態記憶體 TR 中的所有函式,getline 僅在實現定義了 __STDC_ALLOC_LIB__ 並且使用者在包含 stdio.h 之前將 __STDC_WANT_LIB_EXT2__ 定義為整數常量 1 時才保證可用。

目錄

[編輯] 引數

lineptr - 指向初始緩衝區或空指標的指標的指標
n - 指向初始緩衝區大小的指標
delimiter - 分隔符字元
stream - 有效的輸入流,透過 fopen 開啟

[編輯] 返回值

儲存在緩衝區中的字元數,包括分隔符,但不包括空終止符。

錯誤時,返回 -1 並設定 stream 上的 feofferror

[編輯] 注意

這些函式與其 POSIX 版本相同,只是允許(但不要求)在錯誤時設定 errno

[編輯] 示例

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

輸出

Continue? [y] n:

[編輯] 另請參閱

從檔案流獲取字元字串
(函式) [編輯]
(在 C11 中移除)(C11)
stdin 讀取一個字串
(函式) [編輯]
(C95)
從檔案流中獲取一個寬字串
(函式) [編輯]
分配記憶體
(函式) [編輯]