scanf("%s",str[i]);和gets(str[i]);有什么区别?

问题遇到的现象和发生背景

在下面的代码中,
scanf("%s",str[i]);这句可以正常运行,但是写成gets(str[i]);运行结果就会报错

问题相关代码,请勿粘贴截图

int main()
{
int n,i;
scanf("%d",&n);
char str[n][101];
char a[101];
for(i=0;i<n;i++)
{
scanf("%s",str[i]);
//gets(str[i]);
}
}

我的解答思路和尝试过的方法

看到很多都在说这两个语句是可以等效的,不过看目前的状况这两个并不是完全相同有些区别。

img

建议改成这样

img

第一个读取空格之前的,第二个读取一整行的。
如有帮助,请采纳一下,谢谢