Об ошибках fwrite () в C - PullRequest
       9

Об ошибках fwrite () в C

0 голосов
/ 27 сентября 2018

Читает файл и умножает данные на 2. После этого я написал программу, которая пишет в другой файл.Этот файл является 16-битным файлом.Кстати, только определенный номер записывается в созданный файл.Я не знаю, почему это происходит.Пожалуйста, помогите мне.

C (visual studio 2017)

#define _CRT_SECURE_NO_WARNINGS
#define SIZE 16000
typedef short data_type;

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {

    FILE *fd, *fd2;
    data_type *data;
    int n;

    data = (data_type*)malloc(sizeof(data_type) * SIZE);
    for (int i = 0; i < SIZE; i++)
        data[i] = 0;

    if ((fd = fopen("C:\\Users\\SeoHyeon\\Documents\\test16kSam16bMono.pcm", "r")) == NULL)
        printf("Error opening file1");
    if ((fd2 = fopen("C:\\Users\\SeoHyeon\\Documents\\test16kSam16bMono2.pcm", "w")) == NULL)
        printf("Error opening file2");

    n = fread(data, sizeof(data_type), SIZE, fd);

    for (int i = 0; i < SIZE; i++)
        data[i] = data[i] * 2.0;

    if (fwrite(data, sizeof(data_type), SIZE, fd2) != SIZE) {
        printf("Error writing to file.\n");
        exit(1);
    }

    fclose(fd);
    fclose(fd2);

    free(data);

    return 0;
}

1 Ответ

0 голосов
/ 27 сентября 2018

Возможно, что программа не открывает оба файла в режиме двоичный .

Например:

FILE *fin = fopen("input_file.bin", "rb");  // <-- Note the "rb"

Если ваш файл открыт в *Режим 1008 * text , который используется по умолчанию, если в данных есть символ EOF, ввод файла может преждевременно закрыться.

РЕДАКТИРОВАТЬ: Кроме того, вы должны обработать ошибку, когда ваши файловые дескрипторыfd и fd2 равны NULL.Есть также пара других состояний ошибок, которые вы не проверяете, но я оставляю их в качестве упражнения для читателя.

...