【发布时间】:2020-11-08 14:01:03
【问题描述】:
我知道fgets() 是一个更常见和广泛的字符串输入选项,但 C11 已经存在 9 年了。为什么gets_s() 还没有工作?
即使我添加了-std=c11,它仍然不起作用,即使gets_s() 应该在stdio.h 中。
【问题讨论】:
-
gets_s在 C11 中是可选的。任何编译器都不需要实现它,AFAIKgcc不需要。 -
只需使用
fgets(),它与gets_s()不同,实际上可以在 MSVC 之外移植。 -
请注意,gcc 只是一个编译器,根本不实现任何 stdio 函数。所以你的问题是为什么你的系统的标准 C 库没有实现它,但你没有说那是什么系统。无论如何,gcc 及其作者不应该受到责备。
-
据我所知,没有人按照标准实现了所有的附件 K 功能。甚至微软,谁是他们介绍背后的负责人。微软的版本类似,但不完全相同。我也不知道有多少人认为这些可选功能提供了很多真正的优势,而且除了 Microsoft 的 C 实现之外,几乎没有其他人认为这些可选功能提供了很多真正的优势。
-
标准本身推荐 fgets 而不是 gets_s。