总结使用C/C++遇到的问题及分析:
1. Run-Time Check Failure #2 - Stack around the variable 'hex' was corrupted.
代码:
char bin[64] = "\x10\x5A\xFF";
char hex[64] = {0};
Bin2Hex(hex, sizeof(hex), bin, 3);
DWORD WINAPI Bin2Hex(LPSTR pHex, DWORD dwBufLen, LPCSTR pBin, DWORD dwLen)
{
DWORD dwNowLen = 0;
if(NULL == pHex || NULL == pBin)
{
return 0;
}
for(DWORD i = 0; i < dwLen; i++)
{
dwNowLen += 2;
sprintf_s(pHex + i * 2, dwBufLen, "%02X", (BYTE) *(pBin + i));
}
return dwNowLen;
}
调用sprintf_s函数,缓冲区大小不匹配所导致,改为:
sprintf_s(pHex + i * 2, dwBufLen - i * 2, "%02X", (BYTE) *(pBin + i));
2. error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
定位到头文件这条函数声明报错:
std::ostream &print(std::ostream &os, const QueryResult &qr);
原因其实是编译器在这里不认识自定义的类QueryResult,加个前项声明就好:
class QueryResult;
std::ostream &print(std::ostream &os, const QueryResult &qr);