>假设一个二进制文件(需要打开读取)是用这个函数原型编写的:
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!=' ')
{
printf("%c",*ptr);
ptr++;
}
fclose(fp);
}
我在这里错过了什么?我需要阅读的不仅仅是.bin文件中的第一个字符。
一如既往地感谢帮助。谢谢!
如果有人需要以有组织的方式完整代码,这里是粘贴:
http://pastebin.com/66jZwfUD
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);
不要在 C 中强制转换 malloc
的返回值。它隐藏错误。
fp=fopen ( fileName , "rb" ) ;
您需要在此处检查错误。
fread(ptr,sizeof(char),11,fp);
您为 ptr
分配了 5 个字节,现在您正在读取 11 个字节。您还应该检查 fread
的返回值。
while(*ptr!=' ')
{
printf("%c",*ptr);
ptr++;
}
没有什么可以阻止此循环从分配空间的末尾运行。
fclose(fp);
}
现在,您分配的所有内存都会泄漏,并且您读入其中的所有数据都会丢失,因为当您返回时指针超出了范围。