Я видел много похожих вопросов, но ни один из них, похоже, не работает для моего кода, я думаю, что пропускаю что-то простое, может быть, вы можете помочь.
Прямо сейчас я создаю строку для отправки в качестве запроса к функции отправки winsock, которая требует отправки char []. Мне нужно преобразовать мой std :: string в массив char (char []).
В настоящее время это запрос, который работает:
char request [] = "GET /gwc/cgi-bin/fc?client=udayton0.1&hostfile=1HTTP/1.0\nHost:www.gofoxy.net\n\n";
Но мне нужно изменить строку запроса на ту же структуру данных.
Я ценю любую помощь!
редактировать:
Я могу преобразовать строку в символ *, но как я могу использовать это, чтобы получить
массив символов? Я надеюсь, что я не делаю это более запутанным. Вот
две попытки, которые приводят к тому, что char star не совместимы с send
запрос, когда я бегу:
//convert request into a char[]
//char *req_ch = new char[req_str.size()+1];
//hostCh[req_str.size()] = 0;
//memcpy(req_ch, req_str.c_str(), req_str.size());
//char * req = new char[req_str.size() +1];
//std::copy(req_str.begin(), req_str.end(), req);
//req[req_str.size()] = '\0';
Если у вас есть какой-то устаревший API в стиле C с такой подписью, где он ожидает строку в стиле C с нулевым символом в конце:
void foo(const char* data);
тогда вы можете сделать что-то вроде:
std::string s("my string data");
foo(s.c_str());
Если вам действительно нужен массив или неконстантная версия данных, то API это:
void foo(char* data, std::size_t len); // or foo(char[] data, std::size_t len);
Тогда вы можете сделать что-то вроде этого:
std::string s("my string data");
std::vector<char> v(s.begin(), s.end());
foo(&v[0], v.size()); // or foo(v.data(), v.size()); in C++11
Вы действительно нуждаетесь char[]
или будет char const*
делать?
Если последнее, c_str () будет делать то, что вы хотите.
Если первое, то вам нужно скопировать строку в то, что делает то, что вы хотите:
std::vector<char> buff(str.size() + 1); // initializes to all 0's.
std::copy(str.begin(), str.end(), buff.begin());
fun_call(&buff[0]);
Скорее всего, вам нужна только версия c_str. Если вам нужна эта вторая версия, тогда вы читаете и, возможно, надеетесь предоставить максимальный размер баффа.