所以在这段代码中,我想要做的是读取放入新文件的波形文件的初始44个字节,然后使用左右短路序列计算组合
新文件:(初始44字节 - 组合 - 组合 - 组合......)但是当我尝试调用fwrite时它会停止。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE * firstFile;
FILE * finalFile;
size_t size;
char *buffer;
short left;
short right;
short combination;
int loop;
printf("%s", argv[1]);
if ((firstFile = fopen("test.wav", "rb")) == NULL) {
printf("File error");
exit(1);
}
fseek(firstFile, 0, SEEK_END);
size = ftell(firstFile);
fseek(firstFile, 0, SEEK_SET);
buffer = malloc(44);
fread(buffer, 1, 44, firstFile);
finalFile = fopen("new.wav", "rb");
fwrite(&buffer, sizeof(buffer), 1, finalFile);
loop = 1;
while (loop == 1) {
fread(&left, sizeof(short), 1, firstFile);
if (fread(&right, sizeof(short), 1, firstFile) == 0) {
loop = 0;
}
combination = (left - right) / 2;
fwrite(&combination, sizeof(short), 1, finalFile);
}
fclose(firstFile);
fclose(finalFile);
free(buffer);
return 0;
}
答案 0 :(得分:3)
你忘了测试fopen
的失败:
finalFile = fopen("new.wav", "wb");
if (!finalFile) { perror("new.wav"); exit(EXIT_FAILURE); }
如果您编写文件,请以写入模式打开它。
你当然应该编译所有的警告&amp;调试信息:
gcc -Wall -Wextra -g yoursource.c -o yourbinary
并使用调试器(gdb
)
答案 1 :(得分:3)
您刚刚以“rb”模式打开了写文件。
finalFile = fopen("new.wav", "rb");
请尝试
finalFile = fopen("new.wav", "wb");
并检查
finalFile==NULL
答案 2 :(得分:2)
请在写入模式下打开文件,例如&#34; wb&#34;
finalFile = fopen("new.wav", "wb");
然后你必须检查返回值
答案 3 :(得分:1)
您以读取模式打开文件。这就是man page of fopen的问题发生的原因。请尝试写入模式。