c - 未定义对gets_s的引用

标签 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(),但是我不知道它是如何工作的,因为我想读取用户的输入,而不是从文件中读取。

最佳答案

函数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/

相关文章:

java - 在java中将String[]数组转换为动态char[]数组?

java - 在数组旁边显示平均值

c - 错误: expected declaration specifiers or '...' before string constant [puts() and gets() statement errors

c - 字符串的动态内存分配

java - 字符串内的单词替换

c - 调整 gets() 以避免缓冲区溢出

c - 查看堆栈中的内容

c - 为什么我的凯撒密码程序执行时会出错?

c - 使用 memcpy 连接字符串时打印的奇怪字符

c - 从 C 语言的电话簿代码的文本文件中读取信息