You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fwrite直接复制文件数据失败,改用fread中转正常的原因咨询

问题原因解析

错误代码的核心问题

你最初的代码完全用错了fwrite的参数:

fwrite(image, sizeof(BYTE), 512, new_image);
fseek(image, 512, SEEK_CUR);

fwrite的第一个参数要求是存储待写入数据的内存缓冲区指针,但你直接传了FILE*类型的文件指针image。这个指针指向的是C标准库内部维护的文件控制结构体,根本不是源文件内容的内存地址,所以fwrite会把结构体里的随机乱码写到目标文件,和源文件内容毫无关系。

哪怕调用fseek移动了源文件的读写位置,也解决不了fwrite参数错误的本质问题——它从始至终都不会去读取源文件的内容。

正确代码的逻辑

改成先读缓冲区再写入的代码,才符合文件IO的正确流程:

fread(example, sizeof(BYTE), 512, image);
fwrite(example, sizeof(BYTE), 512, new_image);
  • fread会从image指向的源文件当前位置,读取512字节内容到example数组这个内存缓冲区;
  • 接着fwrite把缓冲区example里的有效数据,写入到new_image指向的目标文件中。
    整个过程完成了「源文件内容→内存缓冲区→目标文件」的正确数据流转,自然能正常工作。

内容的提问来源于stack exchange,提问作者Роман Кирьянов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:16:12