c - 使用 fread 和 fwrite .. 数据丢失

标签 c

您好,我正在尝试读取一个二进制文件并对其进行处理,但是当我尝试使用 fread 时,我认为我使用 fread 的方式不对。读取的字节数小于文件的大小。任何人都可以帮助我,白色我做错了

    #include <stdio.h>
    #include <limits.h>

    int main()
    {

    FILE *fin=fopen("./file.pcap","rb");

    char line[LINE_MAX];

    FILE *fout=fopen("out.txt","w");

    while(fread(line,sizeof(line),1,fin)){
        fwrite(&line,sizeof(line),1,fout);
    }

    fclose(fin);
    fclose(fout);

    }

第一个文件是51236左右,out.txt是51200

最佳答案

Fread 返回读取的“元素”数。你说过一个元素是 LINE_MAX 字节长,所以当你到达文件末尾时,没有完整的元素,所以 fread() 返回 0并且您的输出最终被截断。

尝试翻转以读取“多个字节”而不是“1 个 LINE_MAX 字节 block ”:

size_t numBlocks;
while((numBlocks = fread(line, 1, sizeof(line), fin)) > 0) {
    fwrite(line, 1, numBlocks, fout);
}

关于c - 使用 fread 和 fwrite .. 数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13133746/

相关文章:

objective-c - 在 uint8_t * 和 char * 之间转换。会发生什么?

c - 为什么增量运算符会修改原始值而位运算符不会?

c - 这些标志是什么意思? ^@

c++ - 命名空间和 c++/c 混合 header

c - Cortex M4 中的应用程序和固件分离

c - gcc 自动矢量化控制循环中的流程

c - 为什么余数不适用于 Float 值?

c++ - 为什么 electric fence/Valgrind 无法捕获此缓冲区溢出问题?

c++ - 一元增量运算符的原子行为

c - 在井字棋盘中宣布获胜者