所以基本上我在学习C,他们教我们使用gets()函数,我发现该函数已被删除并且无法再使用。因此,我试图学习使用替代方法gets_s()函数,但似乎无法使用。例如,以下代码在尝试编译时为我提供了“对gets_s的未定义引用”:
char line[21];
gets_s( line, 20 );
printf( "The line entered was: %s\n", line );
很多人已经说过使用fgets()而不是gets(),但是我不知道它是如何工作的,因为我想读取用户的输入,而不是从文件中读取。
最佳答案
函数gets_s
不是一流的标准函数。它由Visual Studio(mentioned on MSDN)实现,如果包含stdio.h
,则可用。
有趣的是,C11通过在附录K“边界检查接口”中提及它以及其他_s
函数,将其引入为某种标准功能。但是,许多编译器选择不实现此接口,因此最好不要依赖它。
要重申user3121023所说的话,fgets
可能是最安全的方法(但是如果可以的话,您应该使用sizeof
):
fgets(line, sizeof line, stdin);
请注意,您不需要传递比数组大小小一的值。
关于c - 未定义对gets_s的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25593714/