如果你想从中构造一个 istringstream,一个 char* 到空字符,或者来自 std::string 的所有东西:
istringstream str(ptr); // char*
istringstream str(other_str); // std::string
如果您谈论想要一个指向 istream 缓冲区的原始指针,您就不能这样做。如果流从文件、终端或其他地方需要它们,则可以按需获取它们的数据,可以选择缓冲它们的东西(嗯,不完全正确。您可以使用 a strstream
,它接受原始指针并直接从中读取/写入。但它是一个已弃用的类 - 不要使用它。我很幸运我从未这样做过)。如果你想要的只是你可以使用有点像指针的东西,你可以使用 streambuf 迭代器。它们不是真正的指针,所以你不能减去end
和begin
其他东西:
std::istreambuf_iterator<char> begin(one_istream), end;
while(begin != end)
std::cout << *begin++;
如果您谈论从写入字符串流的内容中获取字符串,您可以使用ostringstream::str
:
ostringstream o;
o << "This is a number: " << 42;
std::string str = o.str(); // str == "This is a number: 42"
否则,您通常只能从istream
. 你需要一个ostream
,然后你可以做
stream.write(ptr, N);
stream.write(ptr.c_str(), ptr.c_str() + ptr.size());
从 str 指向的字节中准确写入 N 个字符。您也可以使用将其写入流中<<
。它会将所有内容写入空字符或 std::string 中的所有内容,但会尊重格式标志,例如字段宽度:
stream << ptr; // char*
stream << other_str; // everything from std::string