[英]C++ fwrite buffer pad string
我正在编辑MP3文件末尾的标签信息。 例如,当我使用fwrite更改标题和艺术家时,如果标题/艺术家的长度与以前不同,则它将与现有数据重叠。
例如:标题:歌曲范例
fwrite("Example Song 2", 30, 1, filename);
...新标题不会使用全部三十个字节。
有没有一种方法可以在写入之前填充字符串以使其成为三十个字节? 或者如何擦除分配给标题的现有三十个字节,然后将新标题写回到文件中?
如果我有正确的问题,您想知道如何将字符串填充为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个字符,则调整大小将截断它,从而减少了溢出的机会
请注意,如果您需要确定缓冲区为null终止,则可以执行以下操作:
v.back()='\0';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.