正如我的标题所说,我想将 curl 执行的输出保存到 vector 中。 能给我一个示例代码吗? 我能够将它保存到c中的结构中。但我想将它保存到 C++ 中的 vector 中,而且我对 C++ 有点不舒服。
vector<string> contents;
size_t handle_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
int numbytes = size*nmemb;
char lastchar = *((char *) ptr + numbytes - 1);
*((char *) ptr + numbytes - 1) = '\0';
contents.push_back((char *)ptr);
*((char *) ptr + numbytes - 1) = lastchar; // Might not be necessary.
return size*nmemb;
}
int main(int argc, char *argv[])
{
vector<string>::iterator i;
CURL* curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl,CURLOPT_URL, argv[1]);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,handle_data);
CURLcode res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (res == 0){
for(i=contents.begin();i!=contents.end();i++)
cout << *i << endl;
}else
cerr << "Error: " << res << endl;
}
return 0;
}
最佳答案
我不知道curl,所以我假设设置代码是正确的。因此,您想要的是回调函数,将接收到的每个数据 block 的字符串添加到字符串 vector 中。这还假设返回的数据是 8 位字符。
vector<string> contents;
size_t handle_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
contents.push_back(string(static_cast<const char*>(ptr), size * nmemb));
return size * nmemb;
}
对 string() 的“调用”实际上构造了一个用指针和数据长度初始化的字符串对象。
关于c++ - 将curl执行的输出保存到c++中的 vector <string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214814/