单线程实现检索当当网泄露的1GB用户数据



  1. 新建项目dangdangusersearch

2.编写头文件head.h

#ifndef
_HEAD_H_

#define
_HEAD_H_

 

#include
<stdio.h>   
//注意文件操作相关函数的头文件是stdio.h

#include<stdlib.h>   
//为了使用system函数

#include
<string.h>  
//字符串操作所用到的头文件

#include<Windows.h>  
//使用休眠函数时用到的头文件

#include
<crtdbg.h>  
//做内存泄露检测所需的头文件

 

//开启内存检测

#define
_CRTDBG_MAP_ALLOC

 

/*菜单查看*/

extern
void
main_view();

 

/*获得文件的字节大小*/

extern
int
getFileSize(const
char *path);

/*加载文件,fPath为传递进去的文件路径*/

extern
void
loadFile(const
char *fPath,
const
int
rowSize);

/*通过关键字查找*/

extern
void
findStringByKeyword(const
char *keyword,
const
int
rowSize);

/*查看文件中有多少行*/

extern
int
getFileRow(const
char *path);

/*释放存放每行直至的数组的内存和每行字符串所占的内存*/

extern
void
freeMemory(char
**pp,
const
int
rowSize);

 

#endif

3.编写main.c

//注意文件操作相关函数的头文件是stdio.h

#include
"head.h"

 

/*菜单查看*/

void
main_view()

{

   
system("cls");

   
printf("\n******************当当用户信息查询系统*******************\n");

   
printf("\t1.载入数据至内存(-l)\n");

   
printf("\t2.查找字符串(-s)\n");

   
printf("\t3.释放内存(-f)\n");

   
printf("\n*************************0.退出**************************\n");

}

4.编写file.c

#define
_CRT_SECURE_NO_WARNINGS

#include
"head.h"

 

char **pp
= NULL;
//存储指针数组的地址

FILE *pf
= NULL; 
//定义一个文件指针

int
flag = 0;    
//这个标识符用于判断是否加载完成,0:标识没有加载,1:表示完成加载,2:表示释放释放内存

 

/*获得文件的字节大小*/

int
getFileSize(const
char *path)

{

   
//按照读取的模式打开

   
pf =
fopen(path,
"r");

   
if (pf
== NULL)

   
{

       
//代表获取文件失败

       
return -1;

   
}

   
else

   
{

       
//fseek():Moves thefile pointer to a specified location.

       
fseek(pf,
0, SEEK_END);

       
//ftell( FILE*stream ):文件开头到当前位置有多少个字节

       
int
num =
ftell(pf);

       
fclose(pf);//关闭文件

       
return
num;

   
}

}

 

/*加载文件,fPath为传递进去的文件路径*/

void
loadFile(const
char *fPath,
const
int
rowSize)

{

   
printf("加载文件中,请稍后....");

   
//pp里面存储的是每行字符串的地址

   
pp = (char
**)malloc(sizeof(char
*)*rowSize);

   
pf =
fopen(fPath,
"r");

   
if (pf
== NULL)

   
{

       
printf("对不起,加载文件失败!");

       
return;

   
}

   
else

   
{

       
int
i;

       
for (i
= 0; i <
rowSize;
i++)

       
{

           
//读取字符串的缓冲区

           
char
str[275] = { 0 };

           
//*fgets( char*string, int n, FILE *stream );

           
//从文件中逐行读取字符串

           
fgets(str,
275, pf);

           
//获取要分配的字符串长度,最后加一是因为'\0'

           
int
strlength =
strlen(str)
+ 1;

           
//分配内存

           
char *px
= malloc(sizeof(char)*strlength);

           
//拷贝字符串

           
strcpy(px,
str);

           
//设定最后一个字符串为'\0'

           
px[strlength
- 1] = '\0';

           
//存储字符串的首地址到指针数组

           
pp[i]
= px;

       
}

   
}

   
fclose(pf);

   
flag = 1;

   
printf("载入内存OK\n");

}

 

/*通过关键字查找*/

void
findStringByKeyword(const
char *keyword,
const
int
rowSize)

{

   
if (pp
== NULL)

   
{

       
printf("对不起,您还没有加载文件,请您先加载文件\n");

       
return;

   
}

   
int
i;

   
for (i
= 0; i <
rowSize;
i++)

   
{

       
//遍历所有的指针数组的地址,字符串查找

       
char *ptemp
= strstr(pp[i],
keyword);

       
if (ptemp
!= NULL)

       
{

           
printf("\n%s",
pp[i]);//打印字符串

       
}

   
}

}

 

int
getFileRow(const
char *path)

{

   
//读取的模式打开

   
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;

   
}

}

 

/*释放存放每行直至的数组的内存和每行字符串所占的内存*/

void
freeMemory(char
**pp,
const
int
rowSize)

{

   
printf("正在释放内存,请稍后!");

   
int
i;

   
for (i
= 0; i <
rowSize;
i++)

   
{

       
//通过这种方式释放内存的时候较慢,因为是一行行的释放的

       
free(pp[i]);

   
}

   
free(pp);

   
flag = 0;

}

5.编写DDSS.c

#define
_CRT_SECURE_NO_WARNINGS

#include
"head.h"

 

extern
int
flag;

extern
char **pp;

 

/************************************************************************/

/*
当当用户信息查询系统                                                */

/************************************************************************/

int
main(int
argc,
char *argv[])

{

   
//文件所在位置

   
char *path
= "G:\\dangdangwang.txt";

   
int
fileSize =
getFileSize(path);

   
//printf("%d字节,%fK,%fM", fileSize, fileSize /1024.0,
fileSize / 1024.0 / 1024.0);

   
//这个选择菜单是的字符串

   
char
choice[25];

 

   
//获得行号

   
int
row =
getFileRow(path);

   
printf("%d\n",
row);

 

flag:system("cls");

   
main_view();

   
if (flag)

   
{

       
printf("文件加载完毕,可以进行查找了!\n");

   
}

   
else
if (flag
== 0)

   
{

       
printf("文件未加载状态,请您先加载文件!\n");

   
}

   
while (1)

   
{

       
printf("输入内容或选择('-v'显示菜单):");

       
scanf("%24s",
choice);

 

       
if (!strcmp(choice,
"-v") || !strcmp(choice,
"-view")){

           
main_view();

       
}

       
else
if (!strcmp(choice,
"-l") || !strcmp(choice,
"-loadFile"))

       
{

           
loadFile(path,
row);

       
}

       
else
if (!strcmp(choice,
"-s") || !strcmp(choice,
"-search"))

       
{

           
while (1)

           
{

               
char
keyword[100] = { 0 };

               
printf("\n请输入要查找的字符串,输入-exit将退出查找\n");

               
scanf("%s",
keyword);

 

               
if (strcmp(keyword,
"-exit"))

               
{

                   
findStringByKeyword(keyword,
row);

               
}

               
else

               
{

                   
break;

               
}

           
}

       
}

       
else
if (!strcmp(choice,
"-f") || !strcmp(choice,
"-free"))

       
{

           
freeMemory(pp,
row);

       
}

       
goto
flag;

   
}

 

   
system("pause");

   
return 0;

}

 

 

 

 

将查询到的结果封装到txt文本中

#define
_CRT_SECURE_NO_WARNINGS  
//关闭安全检查

#include
<stdio.h>

#include
<stdlib.h>

 

void
main()

{

   
char *path
= "G:\\dangdangwang.txt";

   
char *respath
= "G:\\1.txt";

 

   
FILE *pf;

   
FILE *fp;

   
pf =
fopen(path,"r");//读的模式

   
fp =
fopen(respath,"w");//写的模式

   
if (pf
== NULL)

   
{

       
printf("文件打开失败");

   
}

   
else

   
{

       
//文件指针到末尾

       
fseek(pf,
0, SEEK_END);

       
int
num =
ftell(pf);

       
char 
strinfo[200];

       
sprintf(strinfo,
"\nnum=%d字节,%fK,%fM",
num,
num / 1024.0,
num / 1024.0 / 1024.0);

       
fputs(strinfo,
fp);//写入文件

       
rewind(pf);//回到文件开头

       
while (!feof(pf))

       
{

           
//缓冲区

           
char
str[200];

           
//读取,按照行读取

           
fgets(str,
200, pf);

           
if (strstr(str,"谭胜")
!= NULL) 
//字符串查找

           
{

               
fputs(str,
fp);//写入文件

               
printf("\n%s",
str);//打印结果

           
}

       
}

       
fclose(fp);  
//关闭文件

       
fclose(pf);  
//关闭文件

   
}

   
//打开结果文件

   
system(respath);

   
system("pause");

}

 

时间: 2024-08-23 17:07:50

单线程实现检索当当网泄露的1GB用户数据的相关文章

当当网漏洞或致用户资料泄露

498)this.width=498;' onmousewheel = 'javascript:return big(this)' style="width: 463px; height: 203px" border="0" alt="" width="544" height="222" src="http://images.51cto.com/files/uploadimg/20111110/1

用你们平台是否会泄露我的用户数据?请问环信必须要保...

问题描述 **用你们平台是否会泄露我的用户数据?请问环信必须要保留我们的什么数据,是用户名.密码和聊天记录吗?**

当当网紧急冻结所有用户余额和礼品卡并将全额补偿

DoNews 3月20日消息 针对近日多名当当网用户反映账户遭人盗刷的现象,当当网方面回应表示将紧急冻结所有当当网账户余额及礼品卡,并将给与受损用户全额补偿. 当当网方面表示,经过调查核实发现由于很多互联网用户习惯在不同网站上使用统一的账户和密码,基于之前发生的多起互联网泄密事件,给不法分子留下了可乘之机.因此为避免用户损失,当当网将在3月19日至3月21日期间冻结当当网账户余额及礼品卡,在此期间请当当网用户修改密码.同时,当当网将对用户进行全额补偿. 近日,多名网友称自己的当当网账户被盗,账户

中国博客网清除所有免费用户数据 跟一段时光说再见

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 BlogCN免费博客数据清零,网友怀旧 新快报记者 唐佩阳 昨日,中国博客网BlogCN.com宣布清除所有免费用户数据,只有升级成为付费VIP才能享受稳定博客服务.一些媒体官微以哀伤语调报道这一事件,认为BlogCN 这一不少早期博客写手拥有过的首个博客服务对免费用户的"抛弃",事实上宣告了博客时代在微博.微信轰炸下的正式终结. 在微博上,有网友戏称对BlogCN的怀念成了"暴露年龄帖",一些90后网友表示&

当当网被盗账户可获全额赔偿

本报讯(记者 刘宇鑫)继京东商城(微博)之后,当当网(微博)近期也出现了用户账号被盗事件.对此,当当网昨日发表声明,在3月19日至3月21日紧急冻结所有当当网账户余额及礼品卡,http://www.aliyun.com/zixun/aggregation/17453.html">方便用户修改账户密码.对于已经被盗的账户,公司将全额补偿损失.昨天下午6时,当当网客服人员对记者表示,当当网用户账户余额及礼品卡冻结期限将延长至22日. 当当网表示:"近日,当当网极个别账户被盗,造成少数

当当网出现账户被盗事件,将全额赔偿

本报讯(记者 刘宇鑫)继京东商城之后,当当网近期也出现了用户账号被盗事件.对此,当当网昨日发表声明,在3月19日至3月21日紧急冻结所有当当网账户余额及礼品卡,方便用户修改账户密码.对于已经被盗的账户,公司将全额补偿损失.昨天下午6时,当当网客服人员对记者表示,当当网用户账户余额及礼品卡冻结期限将延长至22日. 当当网表示:"近日,当当网极个别账户被盗,造成少数消费者的账户余额被不法分子盗用,对此当当网进行了全面调查.经核实,很多互联网用户习惯在不同网站上使用相同的账户和密码,由于2011年CS

当当网现部分用户账户余额被盗

不少当当网的用户是在收到通知后去检查自己的账户时才发现被盗的. 业内人士估计,很可能实际受影响的不止"约百名用户".继客户信息遭泄露之后再现部分用户账户余额被盗 昨日,当当网(微博)突然向用户发布信息表示,自3月19日起,紧急冻结所有用户的账户余额及礼品卡3天,成为全国零售电商因盗刷而冻结账户的"先行者".当当网昨日向新快报发来的声明表示,事件源于近日极个别账户被盗,造成少数消费者的账户余额被不法分子盗用,因此做出紧急冻结账户的决定.当当网对外透露,事件只涉及&qu

用户账号信息泄密 当当网承诺全额赔付

继去年底电商网站集体爆发大规模用户账号泄密事件之后,近日当当网(微博)再次出现部分用户账号信息泄露.目前,当当已紧急冻结泄露信息的用户账号,并表示会对用户的损失赔偿到底. ●事件回放 当当网再爆账户信息泄露 日前,有网友反映自己的当当网账户余额和礼品卡被盗刷,用于购买电子产品.金银首饰等商品.当当网接报后,已经紧急将所有客户的账号冻结到本月21日,在此期间用户可修改密码,以保证账户的安全. 就在一周前,国内另一大电商京东商城(微博)也爆出账户被盗的情况.有京东用户发现自己的京东账户被盗刷,所有被

多个用户账户被盗 当当网态度前后“大转弯”

3月19日,经常在当当网购书的长春市民刘先生接到当当网发出的紧急通知. 通知中称,当当网个别账户出现礼品卡被不法分子盗用情况,为了用户账户及资金安全,当当网将于3月19日至3月21日冻结用户账户中的礼品卡及余额,并请用户在此期间对登录密码进行修改.一时间,当当网陷入"账号被盗门",而网络账号安全问题又摆在人们面前. 多个用户账户被盗 当当网态度前后"大转弯" 说到"账号被盗门",还要源于近日多名网友在微博中爆料称,自己的当当网账户被盗,账户中的余