[英]strange file reading problem in c++: fread()
读取二进制文件时,我遇到一个非常奇怪的问题。
void metaDataProcess(FILE *f){
unsigned __int32 obLength;
unsigned __int32 numProp;
char* objPath;
unsigned __int32 rawDataIndex;
int level;
fread(&obLength,sizeof(obLength),1,f);
objPath=new char[obLength];
cout<<"i am at"<<ftell(f)<<endl;
fread(&objPath,sizeof( char),obLength,f);
objPath[obLength]='\0';
cout<<"i am at"<<ftell(f)<<" the object path is "<<objPath<<endl;
level=getOrCreateNode(objPath);
fread(&rawDataIndex,sizeof(rawDataIndex),1,f);
“ objPath”没有得到该位置的期望值。 在010编辑器中,该位置为“ /”,但我将其读取为“>”。 这很奇怪,因为从ftell的打印输出值来看,它是正确的位置,并且在此之前和之后读取的值都是期望值(obLength = 1;下一个值rawDataIndex == 4294967295)。
当我输入'/'时我怎么会得到'>'。 我试过fread(&objPath,sizeof(unsigned char),obLength,f); fread(&objPath,1,obLength,f); 他们都是'>'; 任何人都可以帮我吗? 谢谢
objPath=new char[obLength + 1];
cout<<"i am at"<<ftell(f)<<endl;
fread(objPath,sizeof( char),obLength,f);
objPath[obLength]='\0';
我看不到上面的代码有什么问题,除了您要分配一个ilegal内存位置,因为您分配了:
objPath=new char[obLength];
然后做:
objPath[obLength]='\0';
您应该已经分配了new char[obLength+1]
为'\\ 0'保留足够的空间。
另一件事是您在读取文件后正在打印ftell
的结果。 那真的是你想要的吗?
您的010编辑器是以十六进制而非十进制显示位置吗? 您正在以编程方式将其打印为十进制,这样可以解释您所看到的差异。
编辑:您的文件是什么样的? <
期望的字符是否<
/
? 您是否尝试一次读取一个字符并找出/
实际存在的偏移量?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.