#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char **pp = NULL;//存储指针数组的地址
int getfilesize(char *path)//获取文件大小
{
FILE *pf;
pf = fopen(path, "r");//读取的模式打开
if (pf == NULL)
{
return -1;//代表获取失败
}
else
{
fseek(pf, 0, SEEK_END);//到文件末尾
int num = ftell(pf);//文件开头到当前位置有多少字节
fclose(pf);//关闭文件
return num;
}
}
int getn(char *path)//获取行
{
FILE *pf;
pf = fopen(path, "r");
if (pf == NULL)
{
return -1;
}
else
{
int i = 0;
while (!feof(pf))//判断是否到文件末尾
{
char str[275];//缓冲区
fgets(str, 275, pf);//读取一行
i++;//统计多少行
}
fclose(pf);//关闭文件
return i;
}
}
//有13180807行 存储成指针就是50M
void initdatatomem(char *path)
{
pp = (char**)malloc(sizeof(char*) * 13180807);
FILE *pf = fopen(path, "r");
if (pf == NULL)
{
printf("fail");
}
else
{
for (int i = 0; i < 13180807; i++)
{
char str[275] = {0};//缓冲区
fgets(str, 275, pf);//从文件中逐行读取字符串
int strlength = strlen(str) + 1;//获取要分配的字符串的长度
char *px = (char*)malloc(sizeof(char)*strlength);//分配内存
strcpy(px, str);//拷贝字符串
px[strlength - 1] = '\0';//设定最后一个字符为'\0'
pp[i] = px;//存入指针数组
}
}
printf("载入内存OK");
}
void findstr(char *searchstr)
{
for (int i = 0; i < 13180807; i++)
{
char *ptemp = strstr(pp[i], searchstr);//便利所有指针数组地址,字符串查找
if (ptemp != NULL)
{
printf("\n%s", pp[i]);
}
}
}
void main()
{
/*char *path = "F:\\C基础\\c就业\\20140729\\dangdang.txt";
int num = getfilesize(path);
printf("%d字节,%fK,%fM", num, num / 1024.0, num / 1024.0 / 1024.0);
printf("\n有%d行", getn(path));*/
char *path = "F:\\C基础\\c就业\\20140729\\dangdang.txt";
initdatatomem(path);
char searchstr[100] = { 0 };
scanf("%s", searchstr);
findstr(searchstr);
system("pause");
}检索本地本文
最新推荐文章于 2025-08-29 16:17:41 发布
1586

被折叠的 条评论
为什么被折叠?



