簡體   English   中英

C ++ fwrite緩沖墊字符串

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM