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}
내가 무엇을 생각합니다 잘못하고있는거야?