gpt4 book ai didi

C++ fwrite 缓冲垫字符串

转载 作者:行者123 更新时间:2023-11-28 01:01:31 28 4
gpt4 key购买 nike

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

例如:标题:示例歌曲

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

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

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

最佳答案

如果我答对了你的问题,你想知道如何将一个字符串填充到 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';

关于C++ fwrite 缓冲垫字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8460618/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com