[英]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.