大家对搜索文件中的字符串有没有什么比较好的方法
原先不使用缓存,直接用文件操作函数可以,就是速度很慢。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]]






