1. ホーム
  2. c

[解決済み] 標準入力から行を読み、改行が見つかるまでブロックするにはどうすればよいですか?

2022-01-28 23:02:03

質問

コマンドラインでstdinから任意の長さの行を1行ずつ読もうとしています。GNU readlineが使えるかどうか分からないので、ライブラリ関数を使いたいと思っています。

私が読んだドキュメントでは getline は動作するはずなのですが、私の実験ではブロックされないのです。私のサンプルプログラムです。

#include <stdio.h>
int main()
{
    char *line = NULL;
    if (getline(&line, NULL, stdin) == -1) {
        printf("No line\n");
    } else {
        printf("%s\n", line);
    }
    return 0;
}

プロデュース No line そのため、ユーザーからの入力を受け付けるには適していません。

どうすればいいのでしょうか?簡単なことなのは分かっているのですが、なかなか理解できません。

どのように解決するのですか?

このパッチを試してみてください

char *line = NULL;
+size_t size;
+if (getline(&line, &size, stdin) == -1) {
-if (getline(&line, 0, stdin) == -1) {
    printf("No line\n");
} else {