// 简单的三行代码,初看起来没什么问题
std::ostringstream oss;
oss << nameLenHex << totalPageHex << fileNameHexStr << contentLenHex << fileHexStr;
return oss.str();
// 某天fileHexStr长度大于2G时,程序不正常了。。。
// AI结论如下:这确实是 MSVC `std::ostringstream`/`stringbuf` 的问题,
// 它的 `str()` 在有超过 `INT_MAX`(2GB)数据时会被截断。无论 Debug 还是 Release 模式都一样。
// 修正后的代码:
std::string result = nameLenHex + totalPageHex + fileNameHexStr + contentLenHex;
result += fileHexStr;
return result;
MSVC `std::ostringstream`/`stringbuf` 的问题,它的 `str()` 在有超过 `INT_MAX`(2GB)数据时会被截断。无论 Debug 还是 Release 模式都一样。之前那次的测试用的 `cl /MDd` 没有加 `/O2`,这次测试 `/MD /O2` 也复现了,所以不是 Debug 模式特有的。

363

被折叠的 条评论
为什么被折叠?



