C语言遍历缓冲区数据 提取dat文件音频通道列写入失败求助
代码核心问题
- 写入逻辑完全错位:你在读取每一行、成功解析到第二列值
b的时候,就应该直接把b写入输出文件,而不是等全部读完文件之后,错误地遍历变量bufferLength的地址写入。你后段for循环的逻辑完全不符合需求,fputs(&bufferLength, outfp)是严重错误用法:fputs要求传入C风格字符串的首地址,你传入int类型变量的地址,既会输出乱码,也完全和你要存的第二列数据无关。 - 输出文件打开失败后没有终止程序,后续仍执行写入操作会触发未定义行为。
- 可变长度数组
char buffer[bufferLength]存在兼容性问题,并非所有C编译器都支持该语法。
修正后代码
#include <stdio.h> int main(){ double a = 0; double b = 0; // 固定缓冲区大小,避免兼容性问题,单行长可自行调大 const int BUFFER_SIZE = 4096; char buffer[BUFFER_SIZE]; FILE *fp = fopen("original.dat", "r"); if (!fp){ printf("Cant open file\n"); return -1; } FILE *outfp = fopen("out.dat", "w"); if(outfp == NULL) { printf("Unable to create file\n"); fclose(fp); return -1; } while(fgets(buffer, BUFFER_SIZE, fp)) { if (2 == sscanf(buffer, "%lf %lf", &a, &b)){ // 解析到第二列时直接写入输出文件,格式可按需调整 fprintf(outfp, "%f\n", b); // 保留原调试打印 printf("b: %f\n", b); } } // 可选:判断是否为读取错误导致循环终止 if (ferror(fp)) { printf("Error reading original file\n"); fclose(fp); fclose(outfp); return -1; } printf("File transferred\n"); fclose(outfp); fclose(fp); return 0; }
内容的提问来源于stack exchange,提问作者Margi
相关产品推荐
相关产品推荐

