gpt4 book ai didi

c++ - "overwriting"时的 Stringstream write() 问题

转载 作者:行者123 更新时间:2023-11-30 04:37:11 26 4
gpt4 key购买 nike

目前,我有一个名为 Data 的字符串流。我正在使用以下方法寻找字符串流的开头:

Data.seekp(0, std::ios::beg);

然后,我尝试将 2 个整数写入字符串流的前 8 个字节(之前,前 8 个字节被设置为 0)

Data.write(reinterpret_cast<char*>(&dataLength),sizeof(int));
Data.write(reinterpret_cast<char*>(&dataFlags),sizeof(int));

使用 Visual C++ 调试器并设置断点时,我可以看到 dataLength 等于 12,dataFlags 等于 0,因此它应该分别写12和0。

写了2个整数后,好像没什么效果。然后我使用以下代码打印我的字符串流数据:

char* b = const_cast<char*>(Data.str().c_str());  
for (int i = 0; i < dataLength; i++)
{
printf("%02X ",(unsigned char)b[i]);
}

我可以看到我的数据的前 8 个字节仍然是 0,即使我只是用两个整数覆盖了前 12 个字节(其中第一个整数 != 0)。

为什么我的字符串流中的数据没有被正确覆盖?

最佳答案

char* b = const_cast<char*>(Data.str().c_str());

Data.str() 是临时的,在本语句结束时被销毁;该临时文件的 c_str() 的值只能在临时文件处于事件状态时使用(并且您未对其进行任何修改,std::string 的无效规则很复杂)。如果没有未定义的行为,你永远不能使用 b。

std::string b = Data.str();
for (int i = 0; i < b.size(); i++) {
printf("%02X ", (unsigned char) b[i]);
}

关于c++ - "overwriting"时的 Stringstream write() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4061808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com