Есть ли способ конвертировать выше?Конвертировать вектор <char> buf (256) в LPCSTR?
Если да, то какой это лучший способ?
Я думаю, вы можете прокрутить вектор и назначить const char*
, но я не уверен, что это лучший способ.
Есть ли способ конвертировать выше?Конвертировать вектор <char> buf (256) в LPCSTR?
Если да, то какой это лучший способ?
Я думаю, вы можете прокрутить вектор и назначить const char*
, но я не уверен, что это лучший способ.
std::string s(vec.begin(), vec.end());
// now use s.c_str()
Я думаю, что это должно быть достаточно безопасным.
может использовать вместо него конструктор двух итераторов (vec.begin(), vec.end()) '? Кажется, это немного более идиоматично. – Philipp
Очень хорошая точка! & vec [0] - это просто плохая привычка. –
Возможно, вы можете использовать std::string
вместо std::vector<char>
?
Я считаю, что std::string
похож на std::vector<char>
, поэтому вы можете использовать его таким же образом и воспользоваться его дополнительными функциями.
Если да, std::string
имеет способ .c_str()
, который возвращает C-строку с нулевым завершением (a const char*
).
Вы можете сделать что-то вроде этого:
std::string str(&myVec[0], myVec.size());
И тогда str.c_str()
вернет вам const char *
играть. Но это предполагает, что данные в векторе заканчиваются нулем. Если это не так, то никаких гарантий нет.
Только конструктор, который не принимает параметр размера, требует, чтобы строка была нулевой. –
Попробуйте простой
LPCSTR str = &vec[0];
вектор уже содержит смежное хранение, которые требуют строк C. Но будьте осторожны, что vec
уже завершен с нулевой отметкой и что vec
не может быть уничтожен, а str
по-прежнему используется. Обычно vec
может быть уничтожен, как только он больше не используется, поэтому сохранение указателей в vec
опасно и приведет к сбоям. OTOH, передавая указатель в качестве аргумента в порядке аргумента:
f(&vec[0]); // f takes a LPCSTR parameter
Кроме того, память может перемещаться всякий раз, когда сохраняется больше памяти, поэтому вам нужно убедиться, что вектор не управляется, пока указатель существует. –
Любая причина использования вектора вместо строки? http://stackoverflow.com/questions/1200188/how-to-convert-stdstring-to-lpcstr – DumbCoder
@DumbCoder: см. этот вопрос и первый комментарий GMan по причине: http://stackoverflow.com/questions/ 3279733/ofstream-doesnt-write-buffer-to-file – ereOn
Он находится внутри вариационной функции, используя vsprintf, не знаю, можно ли использовать строки здесь ... –