2014-09-27 4 views
0

libcurl을 사용하여 시도한 것은 GET 요청을 서버에 보내고 응답을 저장하는 것입니다. CURLOPT_WRITEFUNCTION 및 CURLOPT_WRITEFDATA를 사용하지 않으면 정상적으로 작동하며 응답은 표준 스트림으로 이동하고 프로그램은 버튼을 누른 후 닫힙니다.Appcrash with cURL

그러나 응답을 저장하기 위해 필자 자신의 함수와 변수를 추가하면 응답이 끝날 때 가비지 문자가 추가되고 버튼을 누르면 프로그램이 충돌합니다.

원본 : { "current_bac"0 "time_until_sober"0}

0

#include <iostream> 
#include <tchar.h> 
#include <stdio.h> 
#include <conio.h> 

#include "curl/curl.h" 
#include "curl/easy.h" 

#define FAIL 0 
#define PASS 1 

size_t curlWrite(void*, size_t, size_t, void*); 

CURL  *curl; 
const char *baseURL = "XXXX"; 
const char *authHeader = "Authorization: Token token=YYYY"; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    bool cURLStatus = PASS; 
    CURLcode res; 

    struct curl_slist *headers = NULL; 
    headers = curl_slist_append(headers, authHeader); 
    char *response; 

    curl = curl_easy_init(); 
    if(curl) 
    { 
     curl_easy_setopt(curl, CURLOPT_URL, baseURL); 
     curl_easy_setopt(curl, CURLOPT_HTTPGET, 1); 
     curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); 
     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWrite); 
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, response); 
     res = curl_easy_perform(curl); 
     if(CURLE_OK != res) cURLStatus = FAIL; 
    } 
    else cURLStatus = FAIL; 

    if(cURLStatus) printf("Response: %s", response); 
    else   printf("Error: %s", curl_easy_strerror(res)); 

    curl_easy_cleanup(curl); 

    _getch(); 

    return 0; 
} 

static size_t curlWrite(void *src, size_t size, size_t nmemb, void *dst) 
{ 
    printf("Source: %s", src); 
    memcpy(dst, src, size * nmemb); 
    return size * nmemb; 
} 

위의 코드를 사용하여 APPCRASH 이어 나는 얻는 반응이며

응답 : { "current_bac": 0, "time_until_sober"0} P

하면 IC 다음 줄 (과의 printf를) 밖으로 omment :

:

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWrite); 
curl_easy_setopt(curl, CURLOPT_WRITEDATA, response); 

을 나는이 얻을 { "current_bac을": 0, "time_until_sober"0}

내가 무엇을 생각합니다 잘못하고있는거야?

답변

0

사람이 비슷한 문제를보고 주위에 libcurl을 컴파일해야한다고 확신했습니다.

char *response = (char *)malloc(sizeof(*response) * 100); 

대신에 :

char *response; 

사실, 솔루션을 사용하는 것입니다