卷曲字符串附加问题,curl_formadd C++读取带有额外字符的变量,但直接CURLFORM_COPYNAME工作正常,"key" [?

Curl string append problems, curl_formadd C++ reads variable with extra character but works just fine directly CURLFORM_COPYNAME, "key" [?]

本文关键字:CURLFORM 变量 COPYNAME key 工作 问题 curl 字符串 formadd C++ 读取      更新时间:2023-10-16

在CURL后变量中添加字符串

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

这一点很好——POST键在页面内容中带有"提交"。

但是这个:

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

但在这里,页面内容的结果带有一个额外的奇怪字符,比如"◘呃☺提交"而不是清除"提交"

我在这里错过了什么?谢谢

您应该使用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 *

EDIT:关于连接问题,可以连接std::string。因此:

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