提问者:小点点

如何从istream中创建特定字节数量的字符串?


我需要创建一个std::String,它的前N个字节是iStream.。。 我该怎么做?

std::istream istm;

std::string  str;
istm >> str;              //will read tons of stuff until finds whitespace

std::string  str(N, ' ');
istm.read(str.data(), N); //can't write into buffer inside string, cause data() returns const char*

std::unique_ptr<char[N+1]> buf;
istm.read(buf.get(), N);
std::string str(buf.get());                //should work, but why extra buffer?

所以。。。 我怎么做才好?


共1个答案

匿名用户

自C++17以来,有一个非constdata()

在此之前,您可以传递&str[0],这样可以得到相同的结果。

请注意,在C++11之前,这在技术上是不安全的,因为C++98/03没有明确保证字符串数据的连续存储(尽管由于许多原因,实际上通常是这样)。