簡體   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