[英]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.