写回调函数中的C++ LIbCURL SEG故障
我想尽快把事情做完。我看到另一个,并试图重用代码。我正在访问几个返回json的非多线程rest服务,当调用CURLOPT_WRITEFUNCTION时,它抛出一个seg错误。我仍然试图掌握所有C++概念,所以诊断相当困难。 这是我看到的写回调函数中的C++ LIbCURL SEG故障,c++,json,rest,curl,libcurl,C++,Json,Rest,Curl,Libcurl,我想尽快把事情做完。我看到另一个,并试图重用代码。我正在访问几个返回json的非多线程rest服务,当调用CURLOPT_WRITEFUNCTION时,它抛出一个seg错误。我仍然试图掌握所有C++概念,所以诊断相当困难。 这是我看到的 static std::string *DownloadedResponse; static size_t writer(char *data, size_t size, size_t nmemb, std::string *buffer_in) {
static std::string *DownloadedResponse;
static size_t writer(char *data, size_t size, size_t nmemb, std::string *buffer_in)
{
cout << "In writer callback" << endl;
// Is there anything in the buffer?
if (buffer_in != NULL)
{
cout << "Buffer not null" << endl;
// Append the data to the buffer
buffer_in->append(data, size * nmemb);
cout <<" Buffer appended, seting response" << endl;
DownloadedResponse = buffer_in;
cout << "Set downloadedResponse" << endl;
return size * nmemb;
}
return 0;
}
std::string downloadJSON(std::string URL)
{
CURL *curl;
CURLcode res;
struct curl_slist *headers=NULL; // init to NULL is important
std::ostringstream oss;
curl_slist_append(headers, "Accept: application/json");
curl_slist_append( headers, "Content-Type: application/json");
curl_slist_append( headers, "charsets: utf-8");
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_URL, URL.c_str());
curl_easy_setopt(curl, CURLOPT_HTTPGET,1);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,writer); // I comment this to display response in stdout.
cout << "calling easy_perform" << endl;
res = curl_easy_perform(curl);
cout << "call made.." << endl;
if (CURLE_OK == res)
{
char *ct;
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
if((CURLE_OK == res) && ct)
{
cout << "returning downloaded resposne" << endl;
return *DownloadedResponse;
}
}
else
{
cout << "CURLCode: " << res << endl;
}
}
cout << "Returning null" << endl;
return NULL;
}
我是如何在writer回调函数中不正确地使用字符串的?您忘了用传递字符串指针/引用
$ ./test-rest
calling easy_perform
In writer callback
Buffer not nullSegmentation fault (core dumped)