繁体   English   中英

我在自己的缓冲区中使用stringstream,但是其str()方法与缓冲区无关吗?

[英]I am using stringstream with my own buffer, but its str() method doesn't related to my buffer?

我想对字符串流使用我自己的缓冲区,但是两次更改缓冲区将不会期望两个输出,如下所示。

std::stringstream ss;
char buffer[10];
memset(buffer, '\0', sizeof buffer);

ss.rdbuf()->pubsetbuf(buffer, sizeof buffer);
sprintf(buffer, "abcd");
std::cout << ss.str() << std::flush;

ss.rdbuf()->pubsetbuf(buffer, sizeof buffer);
sprintf(buffer, "efgh");
std::cout << ss.str() << std::flush;

结果是:

abcd

将缓冲区设置为“ efgh”后,ss.str()不会显示新内容,那是为什么呢?

我之所以要直接设置内部缓冲区,是因为它应该是像recv这样的系统调用。

现在,我发现了该事件,如果我在第二个调用中使用pubsetbuf完全更改了缓冲区,则它根本不会更改,只保留先前的内容。

ss是与“缓冲区”不同的对象,它不是指向“缓冲区”的指针。 当您执行“ pubsetbuf”时,会将缓冲区的内容复制到“ ss”中。 无论如何,您可能想尝试使用“ ss << buffer”代替,这样会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM