gpt4 book ai didi

c++ - 无法将特定内容写入字符串流

转载 作者:太空宇宙 更新时间:2023-11-04 09:14:27 24 4
gpt4 key购买 nike

我有一些示例代码从文件中读取一些二进制数据,然后将内容写入字符串流。

#include <sstream>
#include <cstdio>
#include <fstream>
#include <cstdlib>

std::stringstream * raw_data_buffer;
int main()
{
std::ifstream is;
is.open ("1.raw", std::ios::binary );

char * buf = (char *)malloc(40);
is.read(buf, 40);

for (int i = 0; i < 40; i++)
printf("%02X ", buf[i]);

printf("\n");

raw_data_buffer = new std::stringstream("", std::ios_base::app | std::ios_base::out | std::ios_base::in | std::ios_base::binary);
raw_data_buffer -> write(buf, 40);

const char * tmp = raw_data_buffer -> str().c_str();
for (int i = 0; i < 40; i++)
printf("%02X ", tmp[i]);
printf("\n");

delete raw_data_buffer;
return 0;
}

对于我拥有的特定输入文件,程序无法正常运行。您可以下载测试文件here .

那么问题来了,我把文件内容写入raw_data_buffer,马上读回来,内容不一样了。该程序的输出是:

FFFFFFC0 65 59 01 00 00 00 00 00 00 00 00 00 00 00 00 FFFFFFE0 0A 40 00 00 00 00 00 FFFFFF80 08 40 00 00 00 00 00 70 FFFFFFA6 57 6E FFFFFFFF 7F 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FFFFFFE0 0A 40 00 00 00 00 00 FFFFFF80 08 40 00 00 00 00 00 70 FFFFFFA6 57 6E FFFFFFFF 7F 00 00

内容 FFFFFFC0 65 59 01 被 0 覆盖,为什么?

最佳答案

我怀疑这是使用释放内存导致的未定义行为的症状。你是getting a copy of the string来自 stringstream 但你只是捕获了一个指向内部的原始指针,然后立即将其删除。 (该链接实际上警告了这种情况)

const char* tmp = raw_data_buffer->str().c_str();
// ^^^^^ returns a temporary that is destroyed
// at the end of this statement
// ^^^ now a dangling pointer

tmp 的任何使用都会表现出未定义的行为,并且很容易导致您所看到的问题。将 str() 的结果保留在范围内。

关于c++ - 无法将特定内容写入字符串流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49822880/

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