我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
size_t memory_callback(void *data,size_t size,size_t nmemb,void *content){
size_t realsize=size*nmemb;
//char *content=(char *)user;
content=realloc(content,realsize+1);
if(content==NULL){
fprintf(stderr,"not enouth memory");
return -1;
}
memcpy(content,data,realsize);
//printf("%s",content);//这里可以得到数据
return realsize;
}
size_t get_content(char *url,char *content){
CURL *curl_handle;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl_handle = curl_easy_init();
curl_easy_setopt(curl_handle, CURLOPT_URL, url);
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)");
curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 0L);
curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, memory_callback);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)content);
res = curl_easy_perform(curl_handle);
curl_easy_cleanup(curl_handle);
curl_global_cleanup();
return res;
}
int main(int argc,char *argv[]){
char *content=NULL;
get_content("http://www.baidu.com",content);
free(content);
printf("%s",content);//这里的content难道不是memcpy之后的吗?
return 0;
}
在main中无法输出数据?这是什么原因 不是传递的是指针吗? 当在函数中更改了指针 会反映到实际的变量中。
是指针的问题, 如果你想在函数中改变指针的值需要在传入指向指针的指针.
帮你改了下. 有点强迫症, 顺便改了改了你的code style.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
size_t memory_callback(void *data, size_t size, size_t nmemb, void *content)
{
size_t realsize = size * nmemb;
char *p = *(char **)content;
size_t len = p ? strlen(p) : 0;
*(char **)content = realloc(p, len + realsize + 1);
p = *(char **)content;
if (NULL == p)
{
fprintf(stderr,"not enouth memory");
return -1;
}
memcpy(p + len, data, realsize);
p[len + realsize] = '\0';
return realsize;
}
size_t get_content(char *url, char **content)
{
CURL *curl_handle;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl_handle = curl_easy_init();
curl_easy_setopt(curl_handle, CURLOPT_URL, url);
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)");
curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 0L);
curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, memory_callback);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)content);
res = curl_easy_perform(curl_handle);
curl_easy_cleanup(curl_handle);
curl_global_cleanup();
return res;
}
int main(int argc, char *argv[])
{
char *content = NULL;
get_content("http://www.baidu.com", &content);
printf("%s\n", content);
if (content) free(content);
return 0;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。