libcurl如何处理C中curl\u easy\u setopt(handle,CURLOPT\u WRITEFUNCTION,function)上的第三个参数
我正在做一个从api获取数据的简单程序,并按照文档创建一个回调函数以传递给curl_easy_setopt:libcurl如何处理C中curl\u easy\u setopt(handle,CURLOPT\u WRITEFUNCTION,function)上的第三个参数,c,curl,libcurl,C,Curl,Libcurl,我正在做一个从api获取数据的简单程序,并按照文档创建一个回调函数以传递给curl_easy_setopt: size_t callback_libcurl(void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size
size_t callback_libcurl(void *contents, size_t size, size_t nmemb, void *userp) {
size_t realsize = size * nmemb;
struct resultado *mem = (struct resultado *)userp;
char *ptr = realloc(mem->dados, mem->tamanho + realsize + 1);
if(ptr == NULL) {
printf("not enough memory (realloc returned NULL)\n");
return 0;
}
然后将其传递给:
curl\u easy\u setopt(处理程序\u curl、CURLOPT\u WRITEFUNCTION、回调\u libcurl)代码>
一切正常,但我不知道为什么。我是如何像那样将回调函数传递给curl函数的?
文档中说参数可以是长的、函数指针、对象指针或旋度。
这一点也不奇怪。
我能找到的唯一来源是:
CURL\u EXTERN CURLcode CURL\u easy\u setopt(CURL*CURL,curlpoption,…)代码>
打开/curl/easy.h但这也没用,我不知道是什么。。。是在上面找不到任何内容。
我错过了什么
文档中说参数可以是长的、函数指针、对象指针或旋度。这一点也不奇怪
在C语言中,函数在适当的时候会自动衰减为函数指针。因此,以下是等效的:
curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, callback_libcurl);
curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, &callback_libcurl);
因此,您正在传递一个函数指针,一个指向callback\u libcurl
的指针找到了另一个答案:“……在确定每个参数的类型后,任何类型为“T数组”或“函数返回T”的参数都将分别调整为“指向T的指针”或“指向函数返回T的指针…”从C++(?)标准出发。我想这就解决了,非常感谢你。