我正在编辑MP3文件末尾的标签信息。当我使用fwrite来改变标题和艺术家时,如果标题/艺术家的长度与以前不同,则它与现有数据重叠。
例: 标题:示例歌曲
fwrite("Example Song 2", 30, 1, filename);
...新标题不使用全部30个字节。
有没有办法在写入之前填充字符串以使其为30个字节?或者我如何擦除为标题分配的现有30个字节并将我的新标题写回文件?
答案 0 :(得分:3)
如果我的问题正确,你想知道如何将一个字符串填充到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';