2010-12-07 66 views
0

我有一个使用卷曲的程序。和它的一部分看起来像这样..帮助卷曲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); 

,你可以看到我已经使用了错误缓冲区一个char * ...如何使用字符串而不是一个char *,因为我已经有一个std ::名单<字符串>包含其他错误字符串...

即使没有错误,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]); 

你实际的错误从代码的其余部分,例如,如果你通过它,你可能必须通过它的缓冲区大小太大的错误缓冲区可能来自。

我认为“失败的写体”来自Curl_write_callback没有返回传递给它的相同数量的字节。

+0

只是说明根据文档而不是errBufSize应该使用CURL_ERROR_SIZE – arved 2015-01-12 16:19:53