【发布时间】:2018-02-13 12:09:06
【问题描述】:
我目前正在尝试获取一些我最初为 linux (gcc) 编写的 C 代码,以便在 win32 机器上构建。
MSVC 编译器针对我的所有 printf 和 scanf 用法向我发出警告,建议我应该使用 printf_s 和 scanf_s 作为更安全的替代方案。
忽略 100 条编译器警告从来都不是一件好事,但在这种情况下我应该这样做吗?
有没有简单的解决方法来解决这个问题?也许将这些函数封装在特定于平台的预处理器指令中?
【问题讨论】:
-
如果您安全地使用
printf和scanf,即不让其中任何一个写入提供的缓冲区,您可以忽略这些警告。无论如何,使用特定于平台的预处理器指令,您将为 Windows 使用安全函数,但为 linux 使用相同的旧不安全函数。所以,最好在没有任何错误的情况下使用它们。 -
似乎没有可用于 gcc 的等效函数。我确实快速浏览了 printf_s,args 似乎与 printf 没有任何区别 - 确实提出了一个问题,为什么您不只是为现有功能应用这些安全增强功能?
-
@bgh
fprintf_s()不允许"%n",fprintf()允许"%n"。 -
" ... 作为更安全的选择。"
_s函数并不完全更安全。它们提供了一些好处,但也带来了其他风险。 跨平台代码的一大缺点是选择代码维护加倍,一条路径中的功能/错误差异不会显示在另一条路径中。
标签: c visual-studio gcc stdio