2016-10-14 7 views
1

Я использую fPointInput = fopen(fileName, "r");, пытаясь получить доступ к блоку данных в файле .WAV, но никогда не получая приемлемых результатов. (Массив данных заполняется в основном нулями, за исключением первых нескольких сотен индексов). Может ли это быть вызвано использованием неточного режима открытия?Какой режим fopen() следует использовать при работе с WAV-файлом?

+0

Возможно, вы захотите открыть его с помощью 'rb', так как это двоичный файл. Вы можете использовать 'rb +', если вы хотите получить сообщение об ошибке при открытии файла. – tversteeg

+0

В какой операционной системе вы работаете? Двоичный или текстовый режим действительно имеет значение для Windows. И вы могли бы показать код, который используете для чтения 'fPointInput'? – Schwern

+1

@tversteeg 'rb +' не относится к обработке ошибок. 'rb +' откроет его для чтения и записи, чего они, вероятно, не хотят делать. – Schwern

ответ

3

Этот article указывает, что с использованием rb хорошо работает. Обратите внимание, что в этом ответе ничего нет Windows. Только стандарт C IO.

+0

Unix не различает «текстовые» и «двоичные» файлы. Поэтому 'b' ничего не делает. Однако, чтобы сделать свою кросс-платформу, вы должны использовать 'b' там, где это необходимо. Этот код использует буферы 1K для получения текущего рабочего каталога и имени файла. Вместо этого следует использовать 'MAXPATHLEN' из' sys/param.h'. Но, по крайней мере, он защищает себя от переполнения буфера. – Schwern

 Смежные вопросы

  • Нет связанных вопросов^_^