2010-12-07 12 views
0

私はカールを使用するプログラムを持っています。その一部は、このようになります。..Curl ERRORBUFFERヘルプ

char* Error = NULL; 
Error = (char*)malloc(1024); 
memset(Error, 0, 1024); 
.............. 
    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, Error); 
    curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3); 
    if(CURLE_OK != curl_easy_perform(curl)){ 
     Error[1023] = '\0'; 
//  cout << "cURL returned: " << Error << endl; 
    } 
    curl_easy_cleanup(curl); 
    free(Error); 

を使用すると、私はすでに、STDを持っているように、文字列の代わりのchar *を使用する方法を...エラーバッファのために、char *を使用している見ることができるように他のエラーの文字列が含まれています::リスト<文字列> ...

とエラーがない場合でも、画面の上にcoutの版画、これは:条件はこれを回避するために、場合

cURL returned: Failed writing body (442456 != 998) 

何をする必要があります?

答えて

2

書込み可能なバッファを持たないため、std :: stringを使用してエラーを受け取ることはできません。

STLを使用し、配列のメモリを処理する必要がない場合でも、std :: vectorを使用できます。あなたはそれをあなたはおそらくあまりにもそれをバッファサイズを渡す必要がエラーバッファを渡す場合

const size_t errBufSize = 1024; 
std::vector<char> errBuf(errBufSize); 
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &errBuf[0]); 

あなたが実際のエラーは、たとえば、コードの残りの部分からおそらく来ます。

私は "Body is writing"はCurl_write_callbackから渡されたものと同じ数のバイトを返さないことから来ていると思います。

+0

注記errBufSizeの代わりにドキュメントによると、CURL_ERROR_SIZEを使用する必要があります – arved