2015-01-16 2 views
0

Я - совершенно новый разработчик c, и у меня есть небольшая проблема с libcurl. Я много раз искал в сети, но мне не удалось найти ответ, который работал на меня.c libcurl CURLOPT_POSTFIELDS странная ошибка

Это чистый 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); 

Это работает. Но я хочу передать данные через эту функцию!

Спасибо!

+1

Попробуйте напечатать переменную 'field' после вашего if. Что это такое? Что происходит, когда условие в if неверно? Тогда 'field' не инициализируется. Вы должны инициализировать его, по крайней мере, пустой строкой. – Guillermo

+0

Если strcmp fail field не инициализируется, это приводит к неопределенному поведению. – 2501

ответ

0

malloc() не будет инициализировать память, поэтому вы должны это сделать. Но если инструкция if не принимается, память остается неинициализированной. Делайте это в еще части кода:

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); 
Смежные вопросы