为什么scanf_s在Visual Studio以外的其他地方都无法使用?

时间:2019-06-01 07:06:36

标签: c visual-studio gcc

当我使用Visual Studio时,它说“ scanf不安全,请尝试使用scanf_s”。但是,如果我在gcc或其他编译器中使用scanf_s,它将无法正常工作。 scanf_s是否仅在Visual Studio上工作?如果是这样,为什么?视觉工作室网站说“ scanf不安全”。如果不安全,那为什么其他人仍然使用它呢?

1 个答案:

答案 0 :(得分:3)

mentioned here

  

scanf_s是特定于Microsoft的。标头为stdio.h,但不在GCC中。

documented here

  

使用scanf读取字符串时,请始终以%s格式指定宽度(例如,用“ %32s”而不是“ %s”);否则,格式不正确的输入很容易导致缓冲区溢出。
  或者,考虑使用scanf_s_scanf_s_lwscanf_s_wscanf_s_lfgets

在“ Why didn't gcc implement _s functions?”中查看更多信息

pmg在注释中添加scanf_s()Standard C11 (optional)
这意味着activating c11 with gcc可能就足够了。

但是Shawn添加:

  

IIRC,Microsoft版本未遵循该标准。
  再者,没有其他主要的C库供应商愿意执行附件K,因此它对于所有意图和目的也可能是特定于MS的。

pmg确认:

  

我的gcc(版本6.3.0)无法识别带有scanf_s()的{​​{1}}