所以基本上我正在学习C,他们教我们使用gets()函数,我发现它已被删除,不能再使用了。所以我试图学习使用替代方法,gets_s()函数,但我似乎无法。例如,以下代码在尝试编译时给出了“未定义的gets_s参考”。:
char line[21];
gets_s( line, 20 );
printf( "The line entered was: %s\n", line );
很多人都说使用fgets()而不是gets()但是我不明白它是如何工作的,因为我想读取用户的输入,而不是文件。
答案 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);
请注意,您不需要传递小于数组的那个。