【发布时间】:2019-06-14 20:29:27
【问题描述】:
在 C 语言中,我想从用户那里获取输入,但我不知道它需要多长时间。我想我应该使用malloc()来设置文本数组的长度:
char *text = NULL;
text = malloc(sizeof(input))
但是,我如何在使用fgets() 将输入存储到数组的同时做到这一点?
fgets(text, sizeof text, stdin)
【问题讨论】:
-
首先为字符串分配一个初始缓冲区,大小固定。然后调用
fgets,将长度限制为缓冲区的大小。如果它读得少,那么你可以调用realloc来减小大小,你就完成了。但如果可能还有更多,则调用realloc将缓冲区大小加倍,继续读取,并根据需要重复。 -
您还可以分配多个缓冲区并将它们链接在一起作为链表。
-
如果我没听错,你应该尝试在这个链接中做这样的事情:How to read input of unknown length using fgets
-
你几乎绝对不会使用
char* text = malloc(sizeof(input))。也就是说,除非input恰好是一个静态分配的char数组(在这种情况下,由于您知道静态数组的大小,您很可能不需要动态分配另一个数组)。 -
sizeof text是指针的大小 - 与读取用户输入无关。