C++ easy_curl_perform返回错误26(写入错误)

C++ easy_curl_perform返回错误26(写入错误),c++,curl,C++,Curl,回拨: static size_t w_callback(char *ptr, size_t size, size_t nmemb, void *userdata) { #ifdef DBG add_debug("Curl callback is called from pastebin"); #endif pastebin_ret_data = ptr; return CURLE_OK; } 主要内容: 调试: 从pastebin调用Curl回调 时间:201

回拨:

static size_t w_callback(char *ptr, size_t size, size_t nmemb, void *userdata) {
#ifdef DBG
    add_debug("Curl callback is called from pastebin");
#endif
    pastebin_ret_data = ptr;    
    return CURLE_OK;
}
主要内容:

调试: 从pastebin调用Curl回调 时间:2014年12月24日星期三09:47:44

轻松执行结果:23错误消息:写入正文失败(0!=30)


问题是什么?

问题是返回CURLE\u OK,而不是返回处理的字节数

CURLE_OK定义为0,这是返回的值。回调函数中您处理的字节数必须等于函数参数所接收的字节数:
size\t size,size\t nmemb
,这是您必须返回的值

文档说明:回调应该返回实际处理的字节数。如果该数量与传递给回调函数的数量不同,它将向库发出错误条件的信号。这将导致传输中止,使用的libcurl函数将返回CURLE_WRITE_错误

CURLE_WRITE_ERROR的值为23


我还注意到这些curl_easy_setopt的最后一个参数不正确:

curl_easy_setopt(curl, CURLOPT_POST, (void*)1);
curl_easy_setopt(curl, CURLOPT_URL, (void*)api_url_u8.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, (void*)w_callback);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (void*)postfields_u8.c_str());

给定参数类型,您传递的类型是正确的。void*cast不应该存在。

注意回调函数的返回类型?这是
size\u t
,它应该告诉你函数应该返回一个大小,而不仅仅是一个状态码。真为我感到羞耻,谢谢!
curl_easy_setopt(curl, CURLOPT_POST, (void*)1);
curl_easy_setopt(curl, CURLOPT_URL, (void*)api_url_u8.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, (void*)w_callback);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (void*)postfields_u8.c_str());