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