Как я могу создать строку из указанного c количества байтов из istream? - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно создать 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 Ответ

1 голос
/ 04 августа 2020

Там не- const data() начиная с C ++ 17.

До этого вы можете передать &str[0], что даст вам то же самое.

Примечание что это было технически небезопасно до C ++ 11, поскольку C ++ 98/03 явно не гарантировал непрерывное хранилище для строковых данных (хотя на практике это обычно имело место по ряду причин).

...