gpt4 book ai didi

c++ rdbuf()->pubsetbuf 用于流,使用 char 缓冲区。我里面没有数据

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

也许可以存在更好的解决方案,但这就是我所拥有的:

mybuffer   = new char[265536](); // all to zero 
the_stream = new stringstream ;
the_stream->rdbuf()->pubsetbuf(mybuffer,265536);

我有一个 put 函数:

template <class TTput_stream>
void W_inpout::W_stream::put (TTput_stream &value) {
int a = sizeof value;
const char * buffer ;
buffer = reinterpret_cast<const char*> (&value);
the_stream->write(buffer,sizeof value);
loc+= sizeof value;
if (lof<loc) lof=loc;
}

获取函数:

template <class TTget_stream>
void W_inpout::W_stream::get(TTget_stream & value) {
char * buffer ;
buffer = reinterpret_cast< char*> (&value);
the_stream->read(buffer, sizeof value);
loc=int(the_stream->tellg());
the_stream->seekp(the_stream->tellg());
}

它对我有用。如果我输入一些值(例如 1 个 int、2 个 float 、3 个 double 值),我可以毫无问题地恢复它们(在调用 get 函数之前执行 seekg)。

但是我有一个问题。我想访问“mybuffer”数据,我发现在执行一些“put”命令后,我在所有 265536 个位置中始终为零。

for (int x=0;x<265536;x++) { if (mybuffer[x]!=0) .... )

我不明白发生了什么。我的数据在哪里?为什么我的缓冲区似乎是空的?

最佳答案

我没有看到零。使用 gcc 4.5 检查。如果您使用 Visual Studio,您会发现此链接很有用:

Setting the internal buffer used by a standard stream (pubsetbuf)

关于c++ rdbuf()->pubsetbuf 用于流,使用 char 缓冲区。我里面没有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151988/

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