測評代碼以下:code
#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; }
結果圖字符串
有誤報,有的錯誤沒找到,但瑕不掩瑜。string