每次运行从文件中读取的整数都不同,为什么
Integer read from file different every run, why?
struct ID3v2_header{
char tag[3];
char ver[2];
char flag;
int size;
};
ID3v2_header readID3v2_head(string file){
char buf[10];
ifstream infile(file.c_str(),ios::binary);
ID3v2_header head;
if(!infile || !infile.read(buf, 10)){
cout<<"FAIL"<<endl;
infile.close();
return head;
}
memcpy(&head,buf,10);
infile.close();
return head;
}
我只是输出大小之后,每次运行时它都会发生变化,我是不是在某个地方溢出了?
你应该检查你的假设,sizeof(ID3v2_header) == 10
.
然后,您应该手动填写结构的字段,而不是使用 memcpy
。
文件是字节流。在将数据写入文件之前,需要将其转换为具有已知格式的字节流。当您从文件中读回该数据时,您需要从该字节流的格式转换为内存中结构的格式。
memcpy(&head,buf,10);
这不起作用,因为head
是内存格式,而buf
是文件格式。您需要一些代码才能在这两种不同的格式之间进行转换。
相关文章:
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 为什么:不同符号的整数比较只是偶尔发生?
- 当我输入字符类型的数字时,为什么我无法获得整数?
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 为什么乘以常量有符号整数分数没有优化?
- 在C++中,如果我可以直接将整数分配给指针而不使用"new",为什么要使用"new"?
- 为什么初始化 std::vector 时不能使用模板整数?
- C++字符串大小减去整数不是预期值,为什么?
- 为什么此指针值不能转换为整数的规则是什么?
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 为什么我的 Char* 在填充整数后为空?
- 为什么将两个浮点数相加会得到一个整数C++?
- 为什么可以将整数分配给字符串变量?
- C++:为什么我的掷骰子函数在掷骰子数量时只返回偶数整数?
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 为什么对无符号字符进行算术运算会将它们提升为有符号整数
- 为什么输出是整数而不是双精度?
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?