在执行 cppcheck 时,cppcheck 显示“无效 scanf”,它说:



它会给我的程序带来任何崩溃吗?如何摆脱这个问题?

   int a;
   char str[32];
   int part[4];
   // after this i am storing some string in 'str'.
   a = sscanf(str, "%d%d%d%d", &part[0], &part[1], &part[2], &part[3]); // here i am getting that cppcheck portability error.

最佳答案



通过编写 C++ 而不是 C,并使用 C++ 标准库工具而不是过时且通常不安全的 C 标准库工具。

#include <iostream>
#include <sstream>

void test()
{
   std::string str("4 5 6 7");
   int part[4];

  std::istringstream ss(str);
  ss >> part[0]
    >> part[1]
    >> part[2]
    >> part[3];

}

关于c++ - 收到错误 "scanf without field width limits can crash with huge input data on some versions of libc",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36600061/

10-13 00:07