想用正则匹配特征,忽然想起不能一行行匹配,应该对文件从头到位的匹配免得人家分在多行了匹配不到,通过百度知道了有这么几个好用的函数,或者说以前我木有用过的函数.
feek:改变流的位置,int fseek(FILE *stream, long offset, int fromwhere);成功,返回0,失败返回-1,并设置errno的值,可以用perror()函数输出错误。
,ftell: <stdio.h> 返回当前文件位置,也就是说返回FILE指针当前位置。long ftell(FILE *stream);函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。
perror: #include<
stdio.h>#include<stdlib.h> void perror(const char *s); perror ("open_port"); perror( ) 用来将上一个函数发生错误的原因输出到标准设备 (stderr)。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。
#include <stdio.h> #include <stdlib.h> int main() { char *pchBuf = NULL; int nLen = 0; FILE *pF = fopen(__FILE__, "r"); //打开文件 fseek(pF, 0, SEEK_END); //文件指针移到文件尾 nLen = ftell(pF); //得到当前指针位置, 即是文件的长度 rewind(pF); //文件指针恢复到文件头位置 //动态申请空间, 为保存字符串结尾标志\0, 多申请一个字符的空间 pchBuf = (char*) malloc(sizeof(char)*nLen+1); if(!pchBuf) { perror("内存不够!\n"); exit(0); } //读取文件内容//读取的长度和源文件长度有可能有出入,这里自动调整 nLen nLen = fread(pchBuf, sizeof(char), nLen, pF); pchBuf[nLen] = '\0'; //添加字符串结尾标志 printf("%s\n", pchBuf); //把读取的内容输出到屏幕看看 fclose(pF); //关闭文件 free(pchBuf); //释放空间 return 0; } 读一行呢,是这样子的: /* read a line from web page file */ //if(!feof(addr)) //{ //while(fgets(lbuf, 256, addr)) //{ // if ((z = strlen(lbuf)) > 0 &&( lbuf[z-1]==('\n'))) // lbuf[z - 1] = 0; //strip tail \n // printf("%s%s",pattern,lbuf); //regerror(z, ®, errbuf, sizeof(errbuf)); // if (z == REG_NOMATCH) continue; // else break; //} //}