我有一个使用curl的程序。它的一部分看起来像这样..
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 :: list&lt; string&gt;包含其他错误字符串......
即使没有错误,cout也会将其打印到屏幕上:
cURL returned: Failed writing body (442456 != 998)
应该避免这种情况的条件是什么?
答案 0 :(得分: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,它没有返回传递给它的相同字节数。