读书人

请教一个读取二进制文件的有关问题

发布时间: 2012-04-07 17:31:52 作者: rapoo

请问一个读取二进制文件的问题?

C/C++ code
    FILE* file;    errno_t err=fopen_s(&file,"1.pdf", "r");    if(err)        return false;    int fseekres=fseek(file,0,SEEK_END);    int length=ftell(file);    fseekres=fseek(file,0,SEEK_SET);    char * buffer=new char(length);    fread(buffer,length,1,file);    fclose(file);

我读取出来的数据是:buffer0x004b4ba8 "=?"
请问下我想查找一下char * sercha="%PDF-"这个字符串在buffer中位置?
我用的算法:
C/C++ code
size_t inline Find(char *buffer,char *search,size_t buffersize)    {        if(!buffer||!search)            return -1;        char *bufferex=buffer;        int len=strlen(search);        bool fnd=false;        while (!fnd)        {            fnd=true;            for (size_t i=0;i<len;i++)            {                if(buffer[i]!=search[i])                {                    fnd=false;                    break;                }            }            if(fnd)                 return buffer-bufferex;            buffer++;            if(buffer-bufferex+len>=buffersize)                return -1;        }        return -1;    }

查找:size_t index=FindString(buffer,"%PDF-",length);
但是运行的时候提示buffer的位置不可以写读,请问下,我怎么才可以正确查找出buffer中%PDF的位置?
我的写法有什么问题吗?

[解决办法]
上面的回答是我错了,没想到fopen的函数原型已经作了大改变,哈哈,sorry!

errno_t fopen_s(
FILE** pFile,
const char *filename,
const char *mode
);

char * buffer=new char(length); ==> new char[length];
[解决办法]
strstr 会比较方便。

运行到哪里提示 buffer的位置不可以写读?

大问题没看到,
小问题,开始的时候越界判断都木有,容易出错。
[解决办法]
探讨

引用:

strstr 会比较方便。

运行到哪里提示 buffer的位置不可以写读?

大问题没看到,
小问题,开始的时候越界判断都木有,容易出错。

关键是:buffer读出来是0x004b4ba8 "=?"

[解决办法]
关键是:
fopen_s(&file,"1.pdf", "rb");

[解决办法]
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

读书人网 >C语言

热点推荐