如何摆脱不安全的功能(sprintf,...)

ans*_*wen 0 c c++ gcc g++

我想摆脱sprintf大型C++项目中不安全函数之类的所有用法.我希望errors or at least warnings能够向我展示所有进一步审查的事件.我知道,在OpenBSD上有这样的警告,但我在Linux上.如果我尝试定义一个宏,sprintf我会在<cstdio>标题中得到错误.除了修补系统标题之外,还有什么好主意吗?

编辑: 另外的挑战是,在自己开发的C++字符串类中有一个sprintf函数.所以,只是为sprintf打算会产生很多误报.

Ded*_*tor 5

即使我完全同意@Matt的说法,这些功能并不坏,而且你在禁止你的行为时也是如此,这里就是这样做的.

  1. 今天是补丁标题日:

    1. 复制标题,然后运行grep以查找您担心的那些函数.
    2. 添加__attribute__ ((deprecated))到他们.
    3. 重新编译您的项目.
    4. 利润???
  2. 没有修补标题?

    尽管如此,直接采取行动可能会更好:只需grep您自己的项目文件.
    您甚至可以将该搜索保存为重新应用的脚本.

  3. 使用预处理器(注意,我们正在更改保留标识符,这很糟糕!):

    像这样添加文件"explosive_security.h":

    inline static int my_deprecated() __attribute__ ((deprecated)) {return 0;}
    #undef strcmp
    #define strcmp (my_deprecated(), strcmp)
    
    Run Code Online (Sandbox Code Playgroud)

    并包括所有其他包括它.
    这应该在大多数情况下产生警告并且没有错误,尽管在某些情况下总是出错.