【问题标题】:Is it possible using gets without knowing the length of the array in c?是否可以在不知道 c 中数组长度的情况下使用gets?
【发布时间】:2013-07-18 04:58:26
【问题描述】:

如果我们想在 c 中使用 get,我们将执行以下操作:

int main(void) {
  char str[100];
  while (gets(str)) {
  printf("%s\n",str); 
 }
}

我们必须先知道str的长度(即100)然后使用gets。是否可以在不知道 c 中数组长度的情况下使用gets?

【问题讨论】:

  • 这个问题被问了多少次? :“抱歉数据不能放入变量中”:P

标签: c string gets


【解决方案1】:

如果您的意思是安全地使用gets,不,这是不可能的。

建议:不要使用gets,因为不知道长度,可能会导致缓冲区溢出。请改用fgets,或在C11 中使用gets_s

事实上,自 C11 以来,gets 已从 stdio.h 中删除。 (在 C99 中已弃用)

【讨论】:

    【解决方案2】:

    简短回答:不。

    长答案:如果您知道字符串不会超过特定大小,您总是可以分配更大的内存块。例如,字符串不太可能长于 1k,因此您总是可以简单地分配一个大小为 1k 的数组。但是,这确实效率低下,如果字符串可以任意长,也不起作用。

    【讨论】:

    • gets 从标准输入读取only。除非您可以完全控制标准输入上出现的内容并且可以保证输入行不会超过您的缓冲区大小,否则您不能安全地使用gets。 (想想你的猫站在空格键上几分钟。)
    • 是的,我不是说它是安全的,但它至少给你一个相当好的利润。
    • 很简单:永远不要使用gets
    猜你喜欢
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2012-04-08
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多