C ++ fwrite строка буфера - PullRequest
       1

C ++ fwrite строка буфера

0 голосов
/ 11 декабря 2011

Я редактирую информацию тега в конце файла MP3.Когда я использую fwrite для изменения, например, названия и исполнителя, если название / исполнитель не имеет ту же длину, что и раньше, оно перекрывается с существующими данными.

Пример: Название: Пример композиции

fwrite("Example Song 2", 30, 1, filename);

... новый заголовок не использует все тридцать байтов.

Есть ли способ дополнить строку перед записью, чтобы получить 30 байтов?Или как я могу удалить существующие тридцать байтов, выделенных для заголовка, и записать мой новый заголовок обратно в файл?

1 Ответ

3 голосов
/ 11 декабря 2011

Если я правильно понял ваш вопрос, вы хотите знать, как дополнить строку 30 байтами, чтобы она маскировала все поле.

Один из способов сделать это может быть:

#include <vector>
#include <string>

...

std::string s("Example Song 2");  //string of title
std::vector<char> v(s.begin(), s.end());  //output initialized to string s

v.resize(30,'\0');  //pad to 30 with '\0'

fwrite(&v[0],30,1,file);

Обратите внимание, что у этого метода есть большой плюс, что если заголовок больше 30 символов, то изменение размера усекает его, уменьшая вероятность переполнения

Обратите внимание, если вам нужно быть уверенным, что буфер завершен нулем, тогдаВы можете сделать это:

v.back()='\0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...