Muh*_*lam 3 c gcc visual-studio
当我使用 Visual Studio 时,它说“scanf 不安全,尝试使用 scanf_s”。但如果我在 gcc 或其他编译器中使用 scanf_s ,它就不起作用。scanf_s 仅适用于 Visual Studio 吗?如果是这样,为什么?Visual Studio 网站显示“scanf 不安全”。如果它不安全,为什么其他人仍然使用它?
正如这里提到的
scanf_s是 Microsoft 特定的。头文件是 stdio.h 但不在 GCC 中。
如此处记录的
使用 读取字符串时
scanf,请始终指定格式的宽度%s(例如,使用“%32s”而不是“%s”);否则,格式不正确的输入很容易导致缓冲区溢出。
或者,考虑使用scanf_s、_scanf_s_l、wscanf_s或_wscanf_s_l。fgets
更多内容请参见“为什么gcc没有实现_s函数? ”
pmg在注释中添加的scanf_s()是标准C11(可选)。
这意味着激活c11withgcc可能就足够了。
然而肖恩补充道:
IIRC,微软的版本不遵循标准。
另外,没有其他主要 C 库供应商费心去实现附件 K,因此它可能是针对 MS 的所有意图和目的。
pmg确认:
我的
gcc(版本 6.3.0)无法scanf_s()识别gcc -std=c11 -pedantic ...