getline函数在C语言中如何使用?
C言語では、標準入力ストリームから1行のテキストを読み込むためにgetline関数が使われます。その宣言は以下のようになります:
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
パラメータの説明:
- lineptrは、読み取り行を格納するためのポインタを指すポインタです。
- n:lineptrが指すバッファのサイズを指すポインタであり、lineptrがNULLの場合はnは無視されます。
- stream:入力ストリームへのポインタを指すもので、通常はstdin(標準入力ストリーム)です。
関数の戻り値は読み取った文字数(改行文字を含む)であり、エラーが発生した場合やファイルの末尾に到達した場合は-1を返します。
getline関数の一般的な手順は次のとおりです。
- プログラム内で、行を読み込むために、charポインターとsize_t変数を宣言します。
- 変数を初期化し、必要な場合はバッファのサイズを指定するために、size_t変数をバッファのサイズで初期化します。
- getline関数を使用してループ内で行を読み取り、関数が-1を返すまで(読み取りが終了したことを示すか、エラーが発生したことを示す)読み込みます。
- 行を処理する。
以下はサンプルプログラムです。
#include <stdio.h>
#include <stdlib.h>
int main() {
char *line = NULL; // 用于存储读取的行
size_t len = 0; // 缓冲区大小
printf("请输入文本(按Ctrl + D结束输入):\n");
while (getline(&line, &len, stdin) != -1) {
printf("读取的行:%s", line);
}
free(line); // 释放动态分配的内存
return 0;
}
示例では、プログラムはgetline関数を使って標準入力からテキスト行を読み込み、それをすべて印刷しています。入力が終わるまでです(Ctrl+Dを押す)。getline関数は、読み込んだ行を格納するために自動的にメモリを割り当てるので、プログラム終了時にはfree関数を使ってメモリを解放する必要があります。