using namespace std;
string str{ "text" };
stringstream ss{ str };
cout.rdbuf(ss.rdbuf());
cout.flush(); //cout<<endl;
这段代码本来应该输出文本,但是却没有任何显示。
我将ss与stdout关联起来,然后刷新它,但是即使我参考了很多说明,也不知道为什么它没有起作用。
cout<<rdbuf(ss);
这个是可以的,但是有什么不同呢? :(
cout.rdbuf(ss.rdbuf());
将指针设置为缓冲区。它将cout
重定向到ss
而不是控制台。如果你向cout
写入,它会被写入到ss
中。
我希望这可以为您解决问题。
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::streambuf *backup;
backup = std::cout.rdbuf();
std::stringstream ss;
std::cout.rdbuf(ss.rdbuf());
std::cout << "Test" << std::endl;
std::cout.rdbuf(backup);
std::cout << ss.rdbuf();
return 0;
}
cout
缓冲区当前指针的副本。接下来,我将 cout
重定向到 ss
上。当我写入 cout
时,它会被写入到 ss
的缓冲区中。然后,我将 cout
重新定向回控制台,并打印出 ss
的内容。#include <iostream>
#include <string>
#include <sstream>
#include <cstring>
int main() {
std::stringstream ss{ "test" };
std::stringbuf *pbuf = ss.rdbuf();
char buffer[80];
pbuf->sgetn (buffer,80);
std::streambuf *pbuf2 = std::cout.rdbuf();
pbuf2->sputn (buffer, std::strlen(buffer));
return 0;
}
std::stringstream ss;
ss.basic_ios<char>::rdbuf(std::cout.rdbuf());
ss << "text";
std::cout.flush();
如果你想将ss
的streambuf内容复制到std::cout
中,你可以直接使用插入器:
std::string str{ "text" };
std::stringstream ss{ str };
std::cout << ss.rdbuf();
std::cout.flush();