#define buffer 128
int main(){
char buf[buffer]="";
ifstream infile("/home/kevin/Music/test.mp3",ios::binary);
infile.seekg(-buffer,ios::end);
if(!infile || !infile.read(buf,buffer)){
cout<<"fail!"<<endl;
}
ID3v1 id3;
cout<<sizeof(id3)<<endl;
memcpy(&id3,buf,128);
cout<<id3.header<<endl;
}
struct ID3v1{
char header[3];
char title[30];
char artist[30];
char album[30];
char year[4];
char comment[28];
bool zerobyte;
bool track;
bool genre;
};
当我执行memcpy时,它似乎将太多数据推入标题字段。我是否需要遍历每个结构成员并复制数据?我也在使用c ++,但这似乎更像是一种“C”策略。 c ++有更好的方法吗?
答案 0 :(得分:3)
如所有注释中所述(缺少'\ 0'字符,或者在打印C-Strings时,运算符&lt;&lt;期望字符序列'\ 0'终止。)
尝试:
std::cout << std::string(id3.header, id3.header+3) << std::endl;
这将在标题字段中打印三个字符。
答案 1 :(得分:0)
问题很可能在于memcpy
做了它做的事情。
它将128字节复制到您的结构中。
然后你尝试打印标题。它打印第一个字符,第二个,第三个..并继续打印,直到找到'\0'
(字符串终止字符)。
基本上,当打印出来时,将标题复制到另一个char数组并附加终止字符(或复制到c ++字符串)。
答案 2 :(得分:0)
使用memcpy时可能遇到的其他问题: