getline, getwline, getdelim, getwdelim
|
ヘッダーで定義
<stdio.h>
|
||
| (1) | (動的メモリ TR) | |
| (2) | (動的メモリ TR) | |
| (3) | (動的メモリ TR) | |
| (4) | (動的メモリ TR) | |
getwdelim
関数と同様の動作をします
getwdelim
(
lineptr, n, L
'
\n
'
, stream
)
stream
から
fgetc
によって読み取るように、
delimiter
に遭遇するまで読み取り、
*lineptr
が指すサイズ
*n
のバッファに文字を格納し、
realloc
によって自動的にサイズを増加させて、区切り文字を含む入力全体に適合させ、ヌル終端文字を追加する。
realloc
によって返されたポインタは
*lineptr
に書き戻される。
*lineptr
が null の場合、以前の
*n
の値は無視され、
getline
は
malloc
によって新しいバッファを割り当てる。いずれの場合も、割り当てられたバッファの最終的な長さは
*n
に書き込まれる。
delimiter
の値が
unsigned char
の範囲外または
EOF
の場合、動作は未定義である。
*lineptr
がnullでない場合、
*lineptr
が
free
に渡すことができるポインタでないか、
*n
が
*lineptr
が指す割り当てられたメモリのサイズより大きい場合、動作は未定義です。また、
n
が
size_t
型の値を書き込むのに適した有効なポインタでない場合も動作は未定義です。
Dynamic Memory TRのすべての関数と同様に、
getline
は、実装によって
__STDC_ALLOC_LIB__
が定義され、かつユーザーが
__STDC_WANT_LIB_EXT2__
を整数定数
1
に定義した場合にのみ利用可能であることが保証されます。
目次 |
パラメータ
| lineptr | - | 初期バッファへのポインタ、またはヌルポインタへのポインタ |
| n | - | 初期バッファのサイズへのポインタ |
| delimiter | - | 区切り文字 |
| stream | - | fopen によってオープンされた有効な入力ストリーム |
戻り値
バッファに格納されている文字数。区切り文字を含みますが、null終端文字は含みません。
エラーの場合、
-
1
を返し、
feof
または
ferror
を
stream
に設定します。
注記
これらの関数は、 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)
|
ファイルストリームからワイド文字列を取得する
(関数) |
|
メモリを割り当てる
(関数) |