1. ホーム
  2. c

[解決済み] C 言語でコンソールから行を読み取るには?

2022-08-23 08:27:38

質問

C言語のコンソールプログラムで全行を読み取る最も簡単な方法は何でしょうか。 入力されたテキストは可変長である可能性があり、その内容については何も仮定することができません。

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

動的なメモリ管理が必要であり fgets 関数を使用して行を読み取ります。しかし、何文字読んだかを確認する方法はないようです。そこで、fgetcを使うわけです。

char * getline(void) {
    char * line = malloc(100), * linep = line;
    size_t lenmax = 100, len = lenmax;
    int c;

    if(line == NULL)
        return NULL;

    for(;;) {
        c = fgetc(stdin);
        if(c == EOF)
            break;

        if(--len == 0) {
            len = lenmax;
            char * linen = realloc(linep, lenmax *= 2);

            if(linen == NULL) {
                free(linep);
                return NULL;
            }
            line = linen + (line - linep);
            linep = linen;
        }

        if((*line++ = c) == '\n')
            break;
    }
    *line = '\0';
    return linep;
}

注意 : gets は絶対に使わないでください。境界チェックをしないので、バッファがオーバーフローする可能性があります。