getline, getwline, getdelim, getwdelim
提供: cppreference.com
< c | experimental | dynamic
ヘッダ <stdio.h> で定義
|
||
(1) | (dynamic memory TR) | |
(2) | (dynamic memory TR) | |
(3) | (dynamic memory TR) | |
(4) | (dynamic memory TR) | |
1) getdelim(lineptr, n, '\n', stream) のように動作します。
2) getwdelim(lineptr, n, L'\n', stream) のように動作します。
3) fgetc によって行われたかのように、
delimiter
に遭遇するまでストリーム stream
から読み込み、その文字を *lineptr
の指すサイズ *n
のバッファに格納し、ヌル文字を追加します。 入力全体が収まるよう、 realloc によって行われたかのように自動的にバッファのサイズを増加させます。 *lineptr
はヌルでも構いません。 その場合、 *n
は無視され、 getline
は malloc によって行われたかのように新しいバッファを確保します。
delimiter
が unsigned char
の範囲外であり EOF でない値を持つ場合、動作は未定義です。*lineptr
がヌルでない場合、 *lineptr
が free に渡すことのできるポインタでないか、 *n
が *lineptr
の指す確保済みメモリのサイズより小さければ、動作は未定義です。
Dynamic Memory TR のすべての関数と同様に、 getline
は処理系によって __STDC_ALLOC_LIB__ が定義されており、 stdio.h
をインクルードする前にユーザが __STDC_WANT_LIB_EXT2__ を整数定数 1 に定義する場合にのみ、利用可能であることが保証されます。
目次 |
[編集] 引数
lineptr | - | 初期バッファまたはヌルポインタを指すポインタ |
n | - | 初期バッファのサイズを指すポインタ |
delimiter | - | 区切り文字 |
stream | - | fopen によって開かれた有効な入力ストリーム |
[編集] 戻り値
区切り文字を含み、ヌル終端を除く、バッファに格納された文字数。
エラーの場合は、 -1 を返し、 stream
の feof または ferror を設定します。
[編集] ノート
これらの関数はその POSIX 版と同一です。 ただし、 POSIX 版はエラーの場合に errno を設定することが許されてはいますが、要求されてはいません。
[編集] 例
Run this code
#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) |
ファイルストリームからワイド文字列を取得します (関数) |
メモリを確保します (関数) |