gets与string报错,不明白为什么

问题有1.为什么第一个,第二个会报错;2.为什么第三个成功通过编译,感觉三个差不多。谢谢

#include <iostream>
#include<string>
using namespace  std;
int  main()
{   string a;
    gets(a);
    cout<<a;
    return 0;
}


#include <iostream>
using namespace  std;
int  main()
{   char a;
    gets(a);
    cout<<a;
    return 0;
}
#include <iostream>
using namespace std;
struct student         
{ char name[20];};
int main( )
{      struct student stus;
cout<<"\n Enter a name:" ;
       gets(stus.name);
cout<<stus.name;
return  0;
}


gets(char *)就是用来接收字符数组char[]的,第一个a是string类,第二个是字符char

函数原型:char *gets(char *str); gets里面的参数为char * ,你传一个char类型肯定报错的

原因前面哥几个都说的差不多了,话说,你只知道报错,报错信息你不看的吗,复制粘贴进翻译器里,看看到底报什么错,不就知道了吗
问别人,别人也就等于把错误信息翻译了一遍告诉你