单线程实现检索当当网泄露的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");

}

单线程实现检索当当网泄露的1GB用户数据,布布扣,bubuko.com

时间: 2024-12-30 19:19:34

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

加拿大航空公司遭遇黑客泄露2万用户数据

近日,加拿大航空公司已确认数据泄露可能已影响其170万移动应用用户中的2万名客户.该公司表示,它已在8月22日至24日期间在其移动应用程序中"检测到异常登录行为",在此期间,其部分客户的个人信息"可能未被正确访问". 公开的信息包含基本信息,例如客户姓名,电子邮件地址,电话号码以及他们添加到其个人资料中的其他信息.加拿大航空数据泄露中出现的护照号码. 但是,有什么令人担忧的?如果用户保存此信息,黑客本可以访问其他数据,包括客户的护照号码,护照到期日期,护照签发国和居

Python爬虫库Scrapy入门1--爬取当当网商品数据

1.关于scrapy库的介绍,可以查看其官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/ 2.安装:pip install scrapy  注意这个库的运行需要pywin32的支持,因此还需要安装pywin32.可以在这个网站上选择合适的版本下载安装:https://sourceforge.net/projects/pywin32/files/pywin32/ 3.挖掘当当网商品数据: 首先需要创建一个名为dangdang的爬虫项目,在pow

定价之争有损当当网形象

定价之争有损当当网形象    当当网CEO李国庆的“网骂”事件近日有了新进展.当当网董事长.李国庆的夫人俞渝日前在约见媒体时力挺李国庆,认为当当网IPO定价确实偏低,并表示大摩已为定价过低作出口头和书面道歉.而李国庆更是“得寸进完美整形网的h1e2t尺”,在微博上要求大摩定价部的总经理引咎辞职,“最好把服务当当网上市赚取的手续费也退还”.    其实,当当网去年月日在美国上市是一项多赢之举.对当当网来说,通过上市成功募集亿美元资金,为其下一步发展打下了坚实基础:当当网IPO的发行价达到美元,发行

爬虫之获取当当网全部图书

#encoding:utf-8##author:wuhao# #****** #爬取当当网图书,未使用框架 #main是主函数 #KindLinks.py和 获取数据信息.py 是2个封装的类 #KindLinks只有一个方法,它返回的是 listUrl---(name(小分类名称),url(小分类对应的链接)) LB---(总的分类) #获取数据信息有2个方法,---getpage(),getinfo() getpage()返回的是页码数,getinfo()返回的是每本书中的信息(书名,评论数

jQuery - 当当网我的订单页

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>当当网我的订单页</title> <link type="text/css" rel="stylesheet" href="css/dangdang.css"> <script t

当当网Docker应用实践

随着Docker成为当下热门的容器技术,各大公司以及中小团队都开始选择Docker来进行应用部署,从原有部署方式迁移到Docker方式过程中难免会遇到各种问题,本次分享主要介绍当当网个性化推荐组应用Docker进行应用部署以及小团队试水Docker的的若干经验,分享主要包括以下几点: 现有应用Docker化的过程Docker化的过程 结合Jenkins的自动化构建 使用Mesos和Marathon的自动化部署与集群管理 大家好,非常高兴能有这样的机会跟大家交流. 我是当当网个性化推荐组项目负责人

从当当网发力C2B服装定制看平台电商未来

这年头,电子商务的发展是越来越深入了,除了B2B.C2C.B2C之外,C2B也逐渐兴起,所谓C2B,即消费者先提出需求,电商平台再根据这些信息组织企业进行生产,实现对用户需求的"深度定制",这种模式的出现,让电商平台化发展更进了一步. 举个例子,9月11日,当当网举办"2014当当网服装秋冬新品发布会",同时公布新的"T台加速"计划,这就可以视为对C2B模式的的最佳诠释.根据计划,当当将扩建时尚编辑团队和买手团队,与服装设计师协会建立深度合作,并

当当网

import requests import os import re import re import urllib import urllib.parse from bs4 import BeautifulSoup count=0#小类的个数 all_url='http://category.dangdang.com/?ref=www-0-C' headers={'user-agent':"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537

白话Dubbo——Dubbo框架说明与当当网Duboox REST

dubbo是阿里巴巴开源SOA服务治理方案的核心框架.自2011年开源以后,已被许多非阿里系公司使用. dubbo使用java开发,可以使用zookeeper作为注册中心(dubbo有一个简单的注册中心实现,但不支持集群,就是利用map来存储服务地址),dubbo本身并不是可以独立运行的服务,而是一个普通的Java应用框架.使用dubbo框架开发的应用系统可以称作dubbo应用.dubbo服务器的说法可能容易产生误解. 与持久层框架hibernate,控制层框架spring这样的java框架类似