【发布时间】:2017-02-20 05:08:47
【问题描述】:
我的书说get_s() 函数是gets() 函数的更好替代品,gets() 函数已弃用且不应使用。但是,当我尝试使用 get_s() 函数时,它总是给我一个错误:
undefined reference to gets_s
This page says something about the gets_s,我不太了解它在ISO/IEC 99 中定义的函数。它不应该适用于所有编译器吗?我很确定我使用的是最新版本的 MinGW 编译器。
我应该如何使用这个功能?是使用gets() 或scanf()(而不是scanf_s()),还是fgets() 而不是fgets_s(),不好?
【问题讨论】:
-
“它不应该适用于所有编译器吗”。不,它不是标准的 C 函数。它是微软特有的,所以基本上需要 Visual Studio。
-
@kaylum,“ANSI C”与“微软特定”标准不同吗?
-
@kaylum,不了解这个标准可以吗?如何获取有关可用标准的典型数量的更多信息?
-
gets_s()在 C11 (ISO/IEC 9899:2011) 标准的可选附件 K 中定义。它之前在TR 27431-1 中定义。它由 Microsoft 实现并作为标准提供,但 Unix (POSIX) 社区并没有留下深刻的印象。 C11 未标准化gets()函数——它不再是标准 C 的一部分,尽管所有实现都可能出于“向后兼容性”的原因提供它。它是never safe to usegets()。如果可用,gets_s()可以。 -
你必须知道你工作的环境——是的。他们都是不同的。了解核心 C 标准有很大帮助,但您最终也会使用非标准函数。如果您知道何时使用“非标准”功能,这会有所帮助。 C11 的附录 K 是可选的,不是“核心 C 标准”。直到最近,很多 MS C 支持坚定地是 C90,甚至不是 C99。情况有所改善,但还没有。 MS 有自己的标准岛。 Unix(包括 Linux)具有 POSIX 以提供许多共性,但在该标准之外存在差异。是的,你学到了很多。
标签: c mingw-w64 c11 gets tr24731