未定义的gets_s参考

时间:2014-08-31 15:54:53

标签: c string gets

所以基本上我正在学习C,他们教我们使用gets()函数,我发现它已被删除,不能再使用了。所以我试图学习使用替代方法,gets_s()函数,但我似乎无法。例如,以下代码在尝试编译时给出了“未定义的gets_s参考”。:

char line[21];
gets_s( line, 20 );
printf( "The line entered was: %s\n", line );

很多人都说使用fgets()而不是gets()但是我不明白它是如何工作的,因为我想读取用户的输入,而不是文件。

1 个答案:

答案 0 :(得分:4)

函数gets_s不是一流的标准函数。它由Visual Studio(mentioned on MSDN)实现,只要您包含stdio.h,它就可用。

有趣的是,C11在附录K中提到它是一个有点标准的功能," Bounds-Checking interfaces "以及其他_s函数。然而,许多编译器选择不实现此接口,因此最好不要依赖它。

要重申user3121023所说的内容,fgets可能是最安全的方式(但如果可以的话,你应该使用sizeof):

fgets(line, sizeof line, stdin);

请注意,您不需要传递小于数组的那个。