std::ostringstream长度问题(MSVC)

// 简单的三行代码,初看起来没什么问题
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 模式特有的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

friendan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值