Функция "fread ()" не читает файлы определенных типов? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть этот фрагмент кода для загрузки некоторых файлов в память, в data .

Есть три файла по одному и тому же пути, которые я хотел бы прочитать: файл шрифта XML , PNG и TTF . Все три успешно открыты, и его размер показан в размер . К сожалению, только XML и PNG считываются в данные .

Файл TTF получает правильный размер , одинаково правильный результат из fread , но пустой (не нулевой) data и пустой fp -> _ base .

  char* data;
  size_t size = 0;
  FILE *fp = fopen(completeFilePath, "rb");
  if (fp != NULL) {
    fseek(fp, 0, SEEK_END);
    size = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    data = new char[size];
    size_t result = fread(data, sizeof(char), size, fp);
    fclose(fp);
  }

Не могли бы вы пролить свет на эту проблему?

С благодарностью.

1 Ответ

0 голосов
/ 27 мая 2019

Нулевой байт магическим образом не означает конец всего, в чем он находится. Это просто соглашение, используемое многими стандартными библиотечными функциями языка Си.Вполне допустимо, чтобы файл содержал нулевой байт, а затем имел больше символов.Это именно то, что находится в вашем data: нулевой байт, а затем и другие символы.Так что на самом деле это не пусто;вы просто ошибочно полагаете, что это так.

...