Есть ли эквивалентный способ сделать CString :: GetBuffer в std :: string? - PullRequest
2 голосов
/ 26 декабря 2010

Многие Windows API, такие как GetModuleFileName и т. Д., Записывают вывод в буфер char *. Но удобнее использовать std :: string. Есть ли способ заставить их записывать непосредственно в буфер std :: string (или std :: wstring)?

Извините за мой плохой английский. Я не носитель английского языка. -_-

Taworn T.

Ответы [ 2 ]

4 голосов
/ 26 декабря 2010

Если вы используете C ++ 0x, то гарантированно будет работать следующее:

std::string s;
s.resize(max_length);
size_t actual_length = SomeApiCall(&s[0], max_length);
s.resize(actual_length);

До C ++ 0x содержимое std :: string не гарантируется быть последовательным в памяти, поэтому код не является надежным в теории; на практике это работает для популярных реализаций STL.

0 голосов
/ 26 декабря 2010

используйте std::string::c_str(), чтобы получить const char * с нулевым завершением. std::string::data() также возвращает const char *, но это не может быть завершено нулем.

Но, как говорит zeuxcg, я не предлагаю вам писать прямо в этот буфер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...