用C语言阅读二进制文件

时间:2012-12-09 04:09:27

标签: c file io binary

假设使用此函数原型编写了一个二进制文件(需要打开以供读取):

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文件中的第一个字符。

一如既往地感谢帮助。谢谢!

如果有人需要以有条理的方式提供完整的代码,那么就是粘贴:

http://pastebin.com/66jZwfUD

1 个答案:

答案 0 :(得分:3)

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!='\0')
    {
        printf("%c",*ptr);
        ptr++;

    }

没有什么可以防止这个循环在已分配空间的末尾运行。

    fclose(fp);
}

现在,您分配的所有内存都已泄露,并且您读入的所有数据都将丢失,因为返回时指针超出了范围。