[英]C program terminates when doing fwrite
因此,在這段代碼中,我想做的是從波形文件中讀取最初的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;
}
您忘了測試fopen
的失敗,例如:
finalFile = fopen("new.wav", "wb");
if (!finalFile) { perror("new.wav"); exit(EXIT_FAILURE); }
並且,如果您寫入文件,則以寫入模式打開它。
您當然應該編譯所有警告和調試信息:
gcc -Wall -Wextra -g yoursource.c -o yourbinary
並使用調試器( gdb
)
您剛剛以“ rb”模式打開了寫入文件。
finalFile = fopen("new.wav", "rb");
請試試
finalFile = fopen("new.wav", "wb");
並檢查
finalFile==NULL
請以寫入模式打開文件,如“ wb”
finalFile = fopen("new.wav", "wb");
那么你必須檢查返回值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.