是否可以在不知道c中数组长度的情况下使用gets?

时间:2013-07-19 02:12:14

标签: c string gets

如果我们想在c中使用gets,我们会做类似的事情:

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

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

2 个答案:

答案 0 :(得分:5)

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

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

事实上,自{C11}以来,gets已被stdio.h移除。 (在C99中,它已被弃用)

答案 1 :(得分:1)

简短回答:不。

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