想用正則匹配特徵,忽然想起不能一行行匹配,應該對文件從頭到位的匹配免得人家分在多行了匹配不到,通過百度知道了有這麼幾個好用的函數,或者說以前我木有用過的函數.
feek:改變流的位置,int fseek(FILE *stream, long offset, int fromwhere);成功,返回0,失敗返回-1,並設置errno的值,可以用perror()函數輸出錯誤。
,ftell: <stdio.h> 返回當前文件位置,也就是說返回FILE指針當前位置。long ftell(FILE *stream);函數 ftell() 用於得到文件位置指針當前位置相對於文件首的偏移字節數。
#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; //} //}