我是一个非常新的开发人员,我对libcurl有点麻烦。我之前在网上搜索了很多但是我没有找到适合我的答案。
这是纯粹的c,没有++。
我有这段代码,请求失败
char * write_url(MyData data)
{
char *field = malloc(20 * sizeof(char));
if (strcmp(data.sensorName,"Temperature")==0){
sprintf(field,"&temperature=%.2f",data.measure);
}
CURL *curl;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1/");
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, field);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
但如果我改变
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, field);
的
char *data="&temperature=20";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
它正在运作。 但我希望通过该功能传递数据!
谢谢!
答案 0 :(得分:0)
malloc()不会初始化内存,因此你必须这样做。但如果没有采用if语句,则内存仍然未初始化。在代码的else部分执行此操作:
if (strcmp(data.sensorName,"Temperature")==0)
{
sprintf(field,"&temperature=%.2f",data.measure);
}
else
{
strcmp(field,"Unknown") ;
}
完成后释放内存:
free(field) ;
另请注意,libcurl调用始终返回错误值,请使用它。
curl = curl_easy_init(); //no error checking is perform in your code
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1/");
curl_easy_setopt(curl, CURLOPT_POST, 1);