我正在编写下面的简单程序来下载url中提到的数据。 我想将数据复制到缓冲区中,并且不想使用for循环 现在正在发生。
#include <iostream>
#include <string.h>
#include <curl/curl.h>
#include <queue>
using namespace std;
string data; //will hold the url's contents
char *bufnew;
size_t writeCallback(char* buf, size_t size, size_t nmemb, void* up)
{
printf("size = %d\n\n\n",size);
printf("size nmemb = %d\n\n\n\n\n",nmemb);
//memcpy(bufnew,buf,nmemb);
for (int c = 0; c<size*nmemb; c++)
{
data.push_back(buf[c]);
}
return size*nmemb; //tell curl how many bytes we handled
}
int main()
{
CURL* curl; //our curl object
char url_firstpart[80];// = NULL;
curl_global_init(CURL_GLOBAL_ALL); //pretty obvious
curl = curl_easy_init();
strcpy(url_firstpart,"http://www-itec.uni- klu.ac.at/ftp/datasets/mmsys12/Valkaama/valkaama_1s");
strcat(url_firstpart,"valkaama_1s_50kbit/valkaama_1s1.m4s");
curl_easy_setopt(curl, CURLOPT_URL,url_firstpart);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeCallback);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
curl_global_cleanup();
return 0;
}
在write_callback函数中,所有下载的数据都是buf,它被复制到for循环的数据中。我想避免这种循环并将整个数据复制到其他缓冲区中。我该怎么办呢。如果我正在做memcpy它给我分段错误。
此外,如果多次调用write_callback函数,我如何在第一次迭代时将缓冲区从第二次迭代附加到缓冲区,依此类推。 请指导我。
答案 0 :(得分:0)
如果您想将缓冲区附加到std::string
,可以像这样使用append:
size_t writeCallback(char* buf, size_t size, size_t nmemb, void* up)
{
data.append(buf, size*nmemb);
return size*nmemb; //tell curl how many bytes we handled
}
为了使用不同的缓冲区,您可以使用void *up
代替全局变量data
要使用memcpy,您应该在复制之前分配bufnew
。