getline, getwline, getdelim, getwdelim
From cppreference.com
< C | experimental | dynamic
| ヘッダー <stdio.h> で定義 |
||
| (1) | (動的メモリーTR) | |
| (2) | (動的メモリーTR) | |
| (3) | (動的メモリーTR) | |
| (4) | (動的メモリーTR) | |
1) getdelim(lineptr, n, '\n', stream) のように動作します。
2) getwdelim(lineptr, n, L'\n', stream) のように動作します。
3) ストリーム `stream` から `fgetc` を使って、`delimiter` が見つかるまで文字を読み込みます。読み込んだ文字は、サイズ `*n` のバッファ(`*lineptr` が指す)に格納され、バッファは入力全体(`delimiter` を含む)とヌル終端文字を格納できるように自動的に拡張されます(`realloc` のように)。`*lineptr` が `NULL` の場合、`*n` は無視され、`getline` は新しいバッファを割り当てます(`malloc` のように)。`delimiter` が `unsigned char` の範囲外、または `EOF` の場合、動作は未定義です。
4) (3) と同じですが、文字は `fgetwc` を使って読み込まれ、`delimiter` は有効な `wchar_t` または `WEOF` である必要があります。
もし `*lineptr` が `NULL` でない場合、`*lineptr` が `free` に渡せるポインタでない、または `*n` が `*lineptr` が指す割り当て済みメモリのサイズより小さい場合、動作は未定義です。
Dynamic Memory TR のすべての関数と同様に、`getline` が利用可能であるためには、実装によって `__STDC_ALLOC_LIB__` が定義され、ユーザーが `stdio.h` をインクルードする前に `__STDC_WANT_LIB_EXT2__` を整数定数 `1` として定義する必要があります。
目次 |
[編集] パラメータ
| lineptr | - | 初期バッファまたは `NULL` ポインタを指すポインタへのポインタ |
| n | - | 初期バッファのサイズへのポインタ |
| デリミタ | - | 区切り文字 |
| stream | - | 有効な入力ストリーム。`fopen` によって開かれたもの。 |
[編集] 戻り値
バッファに格納された文字数。区切り文字を含み、ヌル終端文字は除きます。
エラーが発生した場合、`-1` を返し、`stream` に対して `feof` または `ferror` を設定します。
[編集] 注記
これらの関数は、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) |
ファイルストリームからワイド文字列を取得する (関数) |
| メモリを割り当てる (関数) |