Проблемы с добавлением строки curl, curl_formadd C ++ читает переменную с дополнительным символом, но отлично работает напрямую CURLFORM_COPYNAME, "ключ" [?] - PullRequest
1 голос
/ 19 марта 2012

Добавление строки в переменные записи CURL

curl_formadd(&formpost,
               &lastptr,
               CURLFORM_COPYNAME, "submit",
               CURLFORM_COPYCONTENTS, "send",
               CURLFORM_END);

Это прекрасно работает, ключ POST поставляется с "submit" в содержимом страницы.

, но это:

string post = "submit";
 curl_formadd(&formpost,
               &lastptr,
               CURLFORM_COPYNAME, &post,
               CURLFORM_COPYCONTENTS, "send",
               CURLFORM_END);

но здесь содержание страницы в результате содержит дополнительный странный символ, такой как "☺ER☺submit" вместо чистого "submit"

что мне здесь не хватает?спасибо!

1 Ответ

2 голосов
/ 19 марта 2012

Вы должны использовать std::string::c_str():

string post = "submit";
curl_formadd(&formpost,
             &lastptr,
             CURLFORM_COPYNAME, post.c_str(),
             CURLFORM_COPYCONTENTS, "send",
             CURLFORM_END);

Используя &post, вы извлекаете адрес std::string, который является совершенно другим типом данных, чем const char*, который вы использовали при простом использовании строки в кавычках. std::string::c_str, с другой стороны, возвращает const char *, в котором фактически хранится строка.

РЕДАКТИРОВАТЬ : относительно вашего вопроса о конкатенации, std::string может быть объединен. Поэтому:

std::string data = "submit";
data += " foo"; //data will be "submit foo";
std::string data2 = data + " yey"; //data2 will be "submit foo yey";
...