C 程序在执行 fwrite 时终止

标签 c arrays file-io buffer

所以在这段代码中,我试图做的是从放入新文件的 wave 文件中读取最初的 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;
}

最佳答案

您刚刚以“rb”模式打开了写入文件。

finalFile = fopen("new.wav", "rb");

请试试

finalFile = fopen("new.wav", "wb");

并检查

finalFile==NULL

关于C 程序在执行 fwrite 时终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28185608/

相关文章:

c - 使用循环在数组中生成唯一随机数

javascript - 如何使用 javascript 将 JSON 对象操作为数组

java - 对位于我的服务器中的文件使用 File API 方法

c# - 创建一个将写入文件或写入控制台输出的通用方法

c - 函数从 C 到 Delphi

c - 在 C 中使用 TCP_KEEPALIVE 识别 tcp 套接字上的网络关闭

java - 计算数组中某个值的实例数

java - FileInputStream 为空?

c - "+&r"与 "+r"有何不同?

c - 汇编程序中的循环迭代不正确