C++ 获取cURL JSON响应C++;

C++ 获取cURL JSON响应C++;,c++,json,curl,C++,Json,Curl,我想知道如何使用cURL获得JSON响应。我当前的代码不起作用,它只返回一个空字符串。任何帮助都将不胜感激!我在下面包含了我当前的代码 静态大小写回调(void*contents、size\t size、size\t nmemb、void*userp) { ((std::string*)userp)->追加((char*)内容,大小*nmemb); 返回大小*nmemb; } int ipCheck(标准::字符串ip) { nlohmann::json j; 卷曲*卷曲; 卷曲编码; 字符串响

我想知道如何使用cURL获得JSON响应。我当前的代码不起作用,它只返回一个空字符串。任何帮助都将不胜感激!我在下面包含了我当前的代码

静态大小写回调(void*contents、size\t size、size\t nmemb、void*userp)
{
((std::string*)userp)->追加((char*)内容,大小*nmemb);
返回大小*nmemb;
}
int ipCheck(标准::字符串ip)
{
nlohmann::json j;
卷曲*卷曲;
卷曲编码;
字符串响应;
struct curl_slist*headers=NULL;
headers=curl\u slist\u append(headers,“Accept:application/json”);
headers=curl\u slist\u append(headers,“内容类型:application/json”);
curl=curl_easy_init();
if(curl){
curl\u easy\u setopt(curl,CURLOPT\u URL,“http://api.ipstack.com/“+ip+”?访问密钥=机密密钥”);
curl\u easy\u setopt(curl,CURLOPT\u WRITEFUNCTION,WriteCallback);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,response);
res=旋度(curl)\u容易执行(curl);
旋度\轻松\清洁(旋度);
}
if(response.empty()){

std::cout您在这里有一个错误:

curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);

您在此处传递的是
std::string
的临时副本,而不是指向您希望传递给回调的变量的指针,这样就不会触及原始变量!更糟糕的是:回调传递的是一个悬空指针,该指针是投射到
std::string
并对其进行操作的指针(未定义的行为)所以希望看到奇怪的事情(通常是崩溃)

您通过值将响应传递给curl\u easy\u setopt,而不是指针。