是否有任何函数可以从标准输入中获取无限的输入字符串

Dai*_*izy 7 c gets input scanf char

条件是:

我想从标准输入中输入一行,我不知道它的大小,也许很长.

方法,例如scanf,gets需要知道您可以输入的最大长度,以便您的输入大小小于缓冲区大小.

那么有什么好方法可以解决它吗?

答案必须只在C 而不是C++中,所以c ++字符串不是我想要的.我想要的是C标准字符串,类似于char*结束'\0'.

Kei*_*son 8

C标准没有定义这样的功能,但POSIX确实如此.

这里记录getline功能(或者如果你在类UNIX系统上输入的话)可以满足你的要求.man getline

它可能不适用于非POSIX系统(例如MS Windows).

一个演示其用法的小程序:

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    char *line = NULL;
    size_t n = 0;
    ssize_t result = getline(&line, &n, stdin);
    printf("result = %zd, n = %zu, line = \"%s\"\n", result, n, line);
    free(line);
}
Run Code Online (Sandbox Code Playgroud)

与此一样fgets,'\n'换行符仍留在数组中.


Sim*_*mba 5

一种方法是运行循环并getchar不断将字符放入数组中。一旦阵列满了,realloc就把它吃到更大的尺寸。

  • @youKnowDai 兄弟,它是“C”,你必须自己完成所有工作并创建库。 (2认同)