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

C语言实现WAV文件复制失败:输出文件为空求排查

可能的入门级错误排查
  • 文件打开模式错误
    WAV是二进制文件,若使用文本模式(fopen("filename", "r")/"w")打开,在Windows系统下会把字节0x1A识别为EOF,导致提前终止读取;同时文本模式会自动转换换行符(\n和\r\n互转),破坏音频文件结构。必须用二进制模式打开:

    FILE *input = fopen(input_filename, "rb");
    FILE *output = fopen(output_filename, "wb");
    
  • ch的类型错误
    fgetc()返回值是int类型(范围是0~255表示字节,-1表示EOF)。如果把ch定义为char类型,当读取到0xFF这样的字节时,会被符号扩展为-1,和EOF判断相等,导致循环提前退出,完全没写入内容。正确定义:

    int ch;
    
  • 未检查文件打开是否成功
    如果输入文件不存在、路径错误或无读取权限,fopen()会返回NULL,后续的fgetc()/fputc()操作都是无效的,输出文件只会被创建但无内容。必须添加检查:

    if (input == NULL) {
        perror("Failed to open input file");
        return 1;
    }
    if (output == NULL) {
        perror("Failed to open output file");
        fclose(input);
        return 1;
    }
    
  • 未确保文件关闭前缓冲区刷新
    虽然fclose()会自动刷新输出缓冲区,但如果程序在fclose()前异常终止,可能导致数据未写入磁盘。可以在循环结束后手动调用fflush(output);再关闭文件,不过这通常不是输出为空的主因,但也是入门阶段容易忽略的点。

内容的提问来源于stack exchange,提问作者Neuquert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:55:33