繁体   English   中英

C ++中奇怪的文件读取问题:fread()

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM