Как преобразовать двоичный файл в текстовый файл, содержащий целые числа и символы - PullRequest
1 голос
/ 17 марта 2019

У меня есть двоичный файл, который имеет размер (sizeof (int) + sizeof (char)), умноженный на количество узлов в двоичном дереве.Int - это данные, хранящиеся на каждом узле, а char - это операция, выполняемая после того, как вы достигнете этой части в файле.(я для вставки и d для удаления) Мне просто нужно знать, как преобразовать двоичный файл в текстовый файл для целей тестирования.

Вывод должен выглядеть примерно так:

10 i
9 i
14 i
12 i
9 d

Пока моя программа выглядит так:

void convert(char * input, char * output)
{
    FILE * fpin = fopen(input, "rb");
    FILE * fpout = fopen(output, "w");

    char * oper; // operation (either 'i' or 'd')
    int key;   // information to be held by a node

    while ((fscanf(fpin, "%d%s", &key, oper) == 2) {
        fprintf(fpout, "%d %s\n", key, oper);
    }

    fclose(fpin);
    fclose(fpout);
}

Однако я получаю предупреждение о том, что оператор можетиспользоваться неинициализированным.

1 Ответ

0 голосов
/ 17 марта 2019

Сначала измените char *oper на char oper.Это не должен быть указатель.

Я бы предложил использовать вместо него fread.Это просто для чтения фиксированного количества байтов.Замените время следующим:

while(1 == fread(&key, sizeof key, 1, fpin) &&
      1 == fread(&oper, sizeof oper, 1, fpin)) {
      // Print the values
}

Я рекомендую печатать на стандартный вывод, пока не получите желаемый результат.Просто измените fpout.

Однако имейте в виду, что ваш код не переносим.Размер int может варьироваться от машины к машине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...