请问一个读取二进制文件的问题?
- 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的位置不可以写读?
大问题没看到,
小问题,开始的时候越界判断都木有,容易出错。
[解决办法]
[解决办法]
关键是:
fopen_s(&file,"1.pdf", "rb");
[解决办法]
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待
和
fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了