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
相关产品推荐
相关产品推荐

