[英]What should I pass as third parameter in curl_easy_setopt when using ofstream?
很好
FILE *outfile = fopen(resultPath.c_str(), "w");
curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
但是我不想在其余的代碼中使用ofopen(),因為我使用了ofstream。 所以我嘗試了這個:
ofstream outfile;
outfile.open(resultPath.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile.beg);
我不確定第三個參數是否正確,編譯時未顯示任何錯誤,但程序在寫入時崩潰。 那么正確的方法是什么呢?
該參數可以是long型,函數指針,對象指針或curl_off_t,具體取決於特定選項的期望。
為此函數提供的參數與CURLOPT_WRITEFUNCTION
。 CURLOPT_WRITEFUNCTION
size_t function( char *ptr, size_t size, size_t nmemb, void *userdata);
類似size_t function( char *ptr, size_t size, size_t nmemb, void *userdata);
參數size_t function( char *ptr, size_t size, size_t nmemb, void *userdata);
因此,如果我們假設您具有大致如下所示的writefunction:
size_t write_data( char *ptr, size_t size, size_t nmemb, void *userdata);
{
ofstream& outstream = ???;
...
outstream.write(ptr, size * nmemb);
...
}
那么userdata
應該是你可以創建一個ofstream&
而來。
我要傳遞outfile
的地址。
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &outfile);
然后write_data函數變為:
size_t write_data( char *ptr, size_t size, size_t nmemb, void *userdata);
{
ofstream& outstream = *reinterpret_cast<ofstream*>(userdata);
...
outstream.write(ptr, size * nmemb);
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.