测评代码如下:
#include <cstdio>
#include <string>
int main(void)
{
// 多了或者少了格式化参数
::printf("%d%d%d\n", int(1), int(2));
::printf("%d%d%d\n", int(1), int(2), int(3), int(4));
// 格式化类型不正确
::printf("%s\n", std::string("test"));
::printf("%d\n", std::string("test"));
::printf("%d\n", float(12.34));
::printf("%f\n", int(1));
// 越界
int a[10] = {0};
a[10] = 10;
int b[10] = {0};
for (int i; i < 11; ++i)
{
b[i] = 10;
}
for (int i = 0; i < 11; ++i)
{
b[i] = 10;
}
// 字符串比较的典型错误
bool bl;
bl = ("123" == std::string("123").c_str()); // 此处错误没有找到
if (bl)
{
}
// Cppcheck的一个bug
std::string str("123");
::printf("%d", ("123"==str ? int(1) : int(2))); // 此处误报
::system("pause");
return 0;
}
结果图
有误报,有的错误没找到,但瑕不掩瑜。