我正在尝试编写一个类来使用C++和cURL从网站获取一些数据。以下是该类的示例代码(其中有一个Curl * curl_数据成员,rawData_是一个字符串)。这个片段来自实现文件,所有函数都在头文件中声明。
MyClass::MyClass()
{
curl_global_init(CURL_GLOBAL_ALL);
curl_ = curl_easy_init();
curl_easy_setopt(curl_, CURLOPT_URL,
"http://www.google.com");
curl_easy_setopt(curl_, CURLOPT_WRITEFUNCTION, &MyClass::writeCallback);
}
MyClass::~MyClass()
{
curl_easy_cleanup(curl_);
curl_global_cleanup();
}
size_t MyClass::writeCallback(char* buf, size_t size, size_t nmemb, void* up)
{
//buf is a pointer to the data that curl has for us
//size*nmemb is the size of the buffer
for (size_t c = 0; c<size*nmemb; ++c)
{
cerr << c << endl;
rawData_.push_back(buf[c]);
}
return size*nmemb; //tell curl how many bytes we handled
}
void MyClass::makeCall()
{
curl_easy_perform(curl_);
}
当我创建MyClass的实例并调用makeCall时,writeCallBack函数会出现段错误。换句话说,buf似乎是大小为0(当c = 0时,在调用buf [c]时会中断)。任何帮助都将不胜感激。
buf == this
吗? - Matthew Hallbuf
是由Web调用传递的东西;它应该基本上是网站的数据。 - GuestUser11111this
可以被视为静态C风格函数的隐式第一个参数。如果curl调用您提供的回调函数就像调用C风格函数一样(实际上就是这样),至少在调用类方法时,调用约定与C++所期望的不同,会导致未定义的情况发生。 - Matthew Hall