首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-07 
请问一个读取二进制文件的问题?C/C++ codeFILE* fileerrno_t errfopen_s(&file,1.pdf, r)if(err)re

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

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仍继续读;读写的内容当字节看待
弄混了

热点排行