未定义对gets_s的引用

Osa*_*rem 2 c string gets

所以基本上我在学习C,他们教我们使用gets()函数,我发现该函数已被删除并且无法再使用。因此,我正在尝试学习使用替代方法gets_s()函数,但似乎无法使用。例如,以下代码在尝试编译时为我提供了“对gets_s的未定义引用”:

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

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

cni*_*tar 5

该功能gets_s不是一流的标准功能。它由Visual Studio(在MSDN上提到)实现,如果包含,可以使用stdio.h

有趣的是,C11通过在附录K“ 边界检查接口 ”中提到它以及其他_s功能,将其引入为某种标准功能。但是,许多编译器选择不实现此接口,因此最好不要依赖它。

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

fgets(line, sizeof line, stdin);
Run Code Online (Sandbox Code Playgroud)

注意,您不需要传递比数组大小小一的值。