c 程序正在绕过 gets()

c program is bypassing gets()

#include<stdio.h>
int main()
{
int N,i,j,n,*numArray,count=0;
char **arr,*part1,*part2,*token;
scanf("%d",&N);
arr=(char **)malloc(N*sizeof(char *));
numArray=(int *)malloc(N*sizeof(int));
for(i=0;i<N;i++){
arr[i]=(char *)malloc(50*sizeof(char));
}

for(i=0;i<N;i++){
printf("plz enter %d th :",i);
    gets(&arr[i][0]);// why is it not executing

}

for(i=0;i<N;i++){
 printf("%s",arr[i]);
}
return 0;
}

我尝试执行这段代码,发现该行 gets(&arr[i][0]);不会被执行,即它不会等待用户输入。相反,它打印 "plz enter 0 th: plz enter 1 th: plz enter 2 th: and so on" 并且不等待用户输入字符串。 我无法弄清楚到底出了什么问题,到底发生了什么?请帮助。提前致谢。

这一行输入条目数

scanf("%d",&N);

在输入缓冲区中留下 newline。然后这一行

gets(&arr[i][0]);

将单独的 newline 作为第一个条目。

你可以这样去掉它

scanf("%d%*c",&N);

但是你不应该在这个时代使用 gets,它已经过时了。这对于字符串条目来说会更好(而不是上面的mod)

scanf("%50s", arr[i]);

以及检查来自所有 scanf 调用的 return 值。代码仍然需要改进,因为如上所述 scanf 只会扫描到第一个空格。

. it doesn't wait for user to input. Instead, it prints "plz enter 0 th: plz enter 1 th: plz enter 2 th: and so on"

这是由于循环中 white space 的问题...而不是在每次使用 scanf(" "); 扫描字符串之前尝试使用它们,像这样:

for(i=0;i<N;i++){
printf("plz enter %d th :",i);
    scanf(" "); //to consume white spaces
    gets(arr[i]);// why is it not executing? because of wrong arguments

}

编辑如@user3629249

所建议

Never use gets() for two major reasons:

  1. It allows the input to overflow the input buffer
  2. It is removed from the language from C11 onward.

更好的选择是 fgets()

这里是 link 以了解更多信息:here