尝试将读取的数据写入文件时出现Curl Write错误

尝试将读取的数据写入文件时出现Curl Write错误,c,curl,libcurl,void-pointers,arrays,C,Curl,Libcurl,Void Pointers,Arrays,我正在执行以下curl调用以从我的网站读取数据: curl_easy_setopt(handle, CURLOPT_URL, "http://mysite.com"); curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_data); CURLcode code = curl_easy_perform(handle); 这是我的回调方法,写入数据: size_t write_data(void *buffer,

我正在执行以下curl调用以从我的网站读取数据:

    curl_easy_setopt(handle, CURLOPT_URL, "http://mysite.com");
    curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_data);
    CURLcode code = curl_easy_perform(handle);
这是我的回调方法,写入数据:

 size_t write_data(void *buffer, size_t len, size_t nmemb, void *userp) {
     const char* _file  = "file_path";
     FILE* _dataFile = fopen(_file, "a+");
     if (!_dataFile) {
         logMsg("Failed to open file to write to it");
         exit(EXIT_FAILURE);
     }
     int num = fprintf(_dataFile, "%s", (char *) buffer);
     fclose(_dataFile);
     return num;
 }
我从数据块中获取数据,在gdb'ing上,我意识到在上一次调用中,我得到了12303字节,但写入了12310字节。在我看来,问题在于我编写内容文件的方式,将缓冲区转换为char

所以,我的问题是,在不进行额外复制的情况下,从Curl调用读取数据(到文件)的最佳方式是什么? 如果我复制一个通过malloc’ing一个带有
nmemb
字节的字符数组接收到的缓冲区,并将其附加到文件中,则此方法成功

我还想知道是否还有其他函数可以将格式化数据写入文件,我可以用它代替fprintf。

您在其中使用fprintf()就是原因。从libcurl传递到回调的缓冲区不是以零结尾的,因此不能假设%s和fprintf()会做正确的事情,即使在许多情况下纯粹是偶然的

改为使用fwrite()或类似命令,并告诉它要输出的缓冲区大小