正如我的标题所说,我想将卷曲执行的输出保存到矢量.. 可以任意1请给我一个示例代码? 我能够将它保存到c中的结构中。但是我想将它保存到c ++中的矢量中,而且我对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;
}
答案 0 :(得分:1)
试试cURLpp。这里的an example可能很有用。
答案 1 :(得分:1)
我不知道卷曲,所以我假设设置代码是正确的。所以你想要的是回调函数,为接收到的字符串向量的每个数据块添加一个字符串。这也假设返回的数据是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()的“调用”实际构造了一个用指针和数据长度初始化的字符串对象。
答案 2 :(得分:0)
以下是您可能正在寻找的内容:
size_t handle_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
size_t numbytes = size*nmemb;
string temp(static_cast<char*>(ptr), nmemb);
contents.push_back(temp);
return numbytes;
}
我很确定你不想写入CURL库传递的void *ptr
。而且看起来你用'\0'
覆盖了内存地址的最后一个字符,然后在推送到向量后将原始值重新放回到那里。我不确定这会按预期工作。