执行fwrite时C程序终止

时间:2015-01-28 05:56:10

标签: c arrays file-io buffer

所以在这段代码中,我想要做的是读取放入新文件的波形文件的初始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;
}

4 个答案:

答案 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的问题发生的原因。请尝试写入模式。

相关问题