假設一個二進制文件(需要打開供讀取)寫這個函數原型:(可以在下面的膏可以找到有關該功能的更多詳細信息)讀取二進制文件:c
void writeBinaryFile (char *fileName , char *comment , int numberOfDoubles , double *doubles , int numberOfInts , int *ints)
...
我編寫的代碼僅獲得.bin文件的第一個字母...
在這裏,我我的功能:
void readBinaryFile(char *fileName)
{
FILE *fp;
char *ptr;
double *ptr1;
int *ptr2;
ptr=(char*)malloc(sizeof(char)*5);
ptr1=(double*)malloc(sizeof(double)*6);
ptr2=(int*)malloc(sizeof(int)*6);
fp=fopen (fileName , "rb") ;
fread(ptr,sizeof(char),11,fp);
while(*ptr!='\0')
{
printf("%c",*ptr);
ptr++;
}
fclose(fp);
}
我在這裏錯過了什麼?我需要閱讀的不僅僅是.bin文件中的第一個字符。
一如既往的幫助表示讚賞。謝謝!
在這種情況下任何人需要完整的代碼以有組織的方式,這裏是貼:
我注意到你讀了11個字節到分配給5個字節的空間。這當然不會好。 – chrisaycock
這麼多問題......文件實際包含什麼? 'fread()'返回什麼?您發送給'printf()'的字符是否可打印?如果文件是二進制文件,是否可能是第二個字節只是'0',所以你停止嘗試打印字符? –
(1)沒有API返回碼檢查*,(2)三個不同的內存泄漏,(3)在while循環中沒有長度限制以防止進入未分配的堆內存。 (4)將11個字節讀入分配5字節寬=堆損壞全部保證。我確定還有其他人,但是這些都是在60秒內發現的。 – WhozCraig