大家对搜索文件中的字符串有没有什么比较好的方法
原先不使用缓存,直接用文件操作函数可以,就是速度很慢。1秒钟只能搜索100kb,我要搜索的文件大小在100兆左右如果用malloc申请内存,将文件载入,就必须用指针。我对指针比较感冒。。。
试写了一下程序,结果程序崩溃了,不知道错在哪 希望大家能帮帮我
这程序是专门用来搜索".wav"这个字符串的,所以需要注意一下 strlen(".wav") = 4
代码如下
程序代码:
#include <stdio.h> #include <string.h> long FILESIZE; // 返回值为:指向字符串的首地址 char *search_string(char *base, char *str) { int len; int i; long j; char *pt; char buf[256]; len = strlen(str); pt = base; for (j = 0; j+len < FILESIZE; j++) { for (i = 0; i < len; i++) buf[i] = *pt++; buf[len] = 0x00; if ( strcmp(str,buf) == 0 ) { pt = pt - len; return pt; } else { pt = pt - len + 1; } } printf("\nDone!\n"); exit(1); } int main(int argc, char *argv[]) { FILE *fp_src = NULL; char *pt_base = NULL; char *pt_wav = NULL; char *pt_data = NULL; char *pt_wavname = NULL; char *pt_end = NULL; char wav_type[] = ".wav"; char wav_endmark[] = ""; char wav_filename[256]; if ( argc != 2 ) { printf("Miss File!\n"); getch(); exit(1); } if ( (fp_src = fopen(argv[1], "rb")) == NULL ) { printf("Can not open file %s \n", argv[1]); getch(); exit(1); } else { printf("Succeed to open file %s \n", argv[1]); getch(); } fseek(fp_src, 0, SEEK_END); FILESIZE = ftell(fp_src); fseek(fp_src, 0, SEEK_SET);//获得文件长度 pt_base = (char *)malloc(FILESIZE); if (pt_base == NULL) { printf("Error: dont have enough memory!\n"); exit(1); } fread(pt_base, FILESIZE, 1, fp_src); pt_wav = search_string(pt_base, wav_type); while(1) { if (pt_wav != NULL) printf("find wav in %ld", (pt_wav-pt_base)); else exit(1); pt_wav += 4; //".wav"长度为4 pt_wav = search_string(pt_wav, wav_type); } fclose(fp_src); free(pt_base); }
[[it] 本帖最后由 Iam070 于 2008-12-14 19:37 编辑 [/it]]