C ++ fwrite缓冲区字符串

时间:2011-12-10 23:05:36

标签: c++ windows

我正在编辑MP3文件末尾的标签信息。当我使用fwrite来改变标题和艺术家时,如果标题/艺术家的长度与以前不同,则它与现有数据重叠。

例: 标题:示例歌曲

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

...新标题不使用全部30个字节。

有没有办法在写入之前填充字符串以使其为30个字节?或者我如何擦除为标题分配的现有30个字节并将我的新标题写回文件?

1 个答案:

答案 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';