的內容我有複製的結構內容的問題.. 以下情況...我有一個結構arg_struct在我的班級會議:C++複製結構
struct Session::arg_struct
{
const char* targetFilePath;
const char* url;
unsigned int thread_id;
Session::ThreadFinishedCallbackFunction callback;
};
,並在我的方法之一我啓動一個線程,並給予結構,以將要執行的功能:
{
...
arg_struct args;
args.targetFilePath = targetFilePath;
args.url = req_url;
args.thread_id = ++mThread_id;
args.callback = callback;
curl_global_init(CURL_GLOBAL_ALL);
error = pthread_create(&thread,NULL,download,&args);
}
現在下載功能將被執行:
void* download(void* arguments)
{
Session::arg_struct ar = *(Session::arg_struct*) arguments;
Session::arg_struct args;
args.targetFilePath = new char[strlen(ar.targetFilePath)];
args.url = new char[strlen(ar.url)];
strcpy(const_cast<char*>(args.targetFilePath),ar.targetFilePath);
strcpy(const_cast<char*>(args.url),ar.url);
args.callback = ar.callback;
args.thread_id = ar.thread_id;
cout << "copied" << endl;
CURL *curl;
FILE* datafile;
datafile = fopen(args.targetFilePath, "w");
if(datafile != NULL)
{
curl = curl_easy_init();
curl_easy_setopt(curl,CURLOPT_URL,args.url);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,datafile);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(datafile);
} else {
cout << "error: failed to open file!" << endl;
return NULL;
}
在下載函數的開始我複製結構(我quess;)),但我得到的文件無法打開的錯誤。問題是,當我嘗試用fopen()打開文件時,結構是空的。看來我沒有正確地複製結構,或者指向struct(void * arguments)的指針已經不可用。你有什麼建議嗎?
new char [strlen(ar.url)]是錯誤的。您需要爲空終止符添加1。 –