【发布时间】:2015-02-12 12:11:24
【问题描述】:
条件是:
我想从标准输入中输入一行,我不知道它的大小,可能很长。
像scanf、gets这样的方法需要知道您可以输入的最大长度,以便您的输入大小小于缓冲区大小。
那么有什么好的方法来处理呢?
答案只能是C,不是C++,所以c++字符串不是我想要的。我想要的是 C 标准字符串,类似于 char* 并以 '\0' 结尾。
【问题讨论】:
-
MAYBE 有什么东西可以根据你在 C 中的输入大小自动分配内存吗?
-
这个功能很少有用。对于处理无限制输入的代码,更常见的是,一些输入发生,即被处理,然后是更多输入。等等。通过真实的用户输入,例如人名、电话号码或书名,是的,肯定有 100 个
char长的名称/标题和数十位数字的电话号码。但是允许无限制的输入会邀请黑客用十亿长的名称/标题等来压倒系统。允许异常的,甚至是病态的长输入要好得多,但不是无限制的。fgets(user_name, 1000, stdin)就足够了。 -
gets不允许您指定目标数组的大小。这就是它本质上不安全的原因,这就是为什么它从 2011 ISO C 标准的语言中删除。你在想fgets吗? -
读取未知数量数据的方式很大程度上取决于读取器如何处理数据。您可能想提供任何详细信息吗?