我需要创建一个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?
所以。。。 我怎么做才好?
自C++17以来,有一个非const
data()
。
在此之前,您可以传递&str[0]
,这样可以得到相同的结果。
请注意,在C++11之前,这在技术上是不安全的,因为C++98/03没有明确保证字符串数据的连续存储(尽管由于许多原因,实际上通常是这样)。