Преобразовать вектор <char>buf (256) в LPCSTR? - PullRequest
1 голос
/ 19 июля 2010

Есть ли способ конвертировать выше?

Если так, какой путь лучше?

Полагаю, вы можете перебрать вектор и присвоить const char*, но я не уверен, что это лучший способ.

Ответы [ 4 ]

3 голосов
/ 19 июля 2010
std::string s(vec.begin(), vec.end());
// now use s.c_str()

Я думаю, это должно быть довольно безопасно.

1 голос
/ 19 июля 2010

Может быть, вы могли бы использовать std::string вместо std::vector<char>?

Я считаю, std::string похож на std::vector<char>, поэтому вы можете использовать его таким же образом и воспользоваться его дополнительными функциями.

Если это так, std::string имеет метод .c_str(), который возвращает C-строку с нулевым символом в конце (a const char*).

0 голосов
/ 19 июля 2010

Попробуйте просто

LPCSTR str = &vec[0];

Вектор уже содержит непрерывное хранилище, которое требуется для C-строк. Но будьте осторожны, что vec уже завершено нулем и что vec нельзя уничтожить, пока str все еще используется. Как правило, vec может быть уничтожено, если оно больше не используется, поэтому хранение указателей на vec опасно и приведет к сбоям. OTOH, передача указателя в качестве аргумента может подойти:

f(&vec[0]);  // f takes a LPCSTR parameter
0 голосов
/ 19 июля 2010

Вы можете сделать что-то вроде этого:

std::string str(&myVec[0], myVec.size());

И тогда str.c_str() вернет вам const char * для игры.Но это предполагает, что данные в векторе заканчиваются нулем.Если это не так, то нет никаких гарантий.

...