测评代码如下:
1#include <cstdio> 2#include <string> 3int main(void) 4{ 5 // 多了或者少了格式化参数 6 ::printf("%d%d%d\n", int(1), int(2)); 7 ::printf("%d%d%d\n", int(1), int(2), int(3), int(4)); 8 // 格式化类型不正确 9 ::printf("%s\n", std::string("test")); 10 ::printf("%d\n", std::string("test")); 11 ::printf("%d\n", float(12.34)); 12 ::printf("%f\n", int(1)); 13 // 越界 14 int a[10] = {0}; 15 a[10] = 10; 16 int b[10] = {0}; 17 for (int i; i < 11; ++i) 18 { 19 b[i] = 10; 20 } 21 for (int i = 0; i < 11; ++i) 22 { 23 b[i] = 10; 24 } 25 // 字符串比较的典型错误 26 bool bl; 27 bl = ("123" == std::string("123").c_str()); // 此处错误没有找到 28 if (bl) 29 { 30 } 31 // Cppcheck的一个bug 32 std::string str("123"); 33 ::printf("%d", ("123"==str ? int(1) : int(2))); // 此处误报 34 ::system("pause"); 35 return 0; 36}
结果图

有误报,有的错误没找到,但瑕不掩瑜。