日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/9/27 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单线程实现检索当当网泄露的1GB用户数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 新建項目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用户数据的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 午夜一级视频 | 美女隐私免费网站 | 男人天堂手机在线观看 | 国产视频一二区 | 一级片一级 | 久久mm | 性一交一乱一区二区洋洋av | 亚洲啊啊 | 免费视频中文字幕 | 制服丝袜在线一区 | 美女扒开尿口来摸 | av在线收看| 超污视频在线观看 | 黑人巨大精品欧美黑白配亚洲 | 亚洲综合图片一区 | 麻豆91在线播放 | 国产一区自拍视频 | 久久久精品国产sm调教网站 | 国产成人精品一区二区三区网站观看 | 久久精品免费电影 | 久久国产中文字幕 | 亚洲制服一区 | 亚洲天堂免费视频 | 亚洲成人午夜影院 | 久久久久精彩视频 | 国产日韩一级 | 日本在线观看视频网站 | 北条麻妃久久精品 | 日韩和欧美一区二区 | 男人av网站 | av在线免费观看一区 | 日本女优在线看 | 日韩欧美精品中文字幕 | 91成人免费看片 | 中文字幕国产一区 | 综合久久婷婷 | 麻豆changesxxx国产| 蜜臀av性久久久久蜜臀aⅴ四虎 | 午夜天堂在线 | 日韩aⅴ视频 | 日韩在线播放av | 激情黄色小视频 | 91网址在线播放 | 中国少妇做爰全过程毛片 | 色av吧| jizzjizz中国精品麻豆 | 国产成人精品综合在线观看 | 精品一区二区久久 | 强迫凌虐淫辱の牝奴在线观看 | 91偷拍一区二区三区精品 | 女优一区| 久久艹伊人 | 在线免费国产视频 | 国产精品国产成人国产三级 | 亚洲一区av在线 | 国产精品视频在线观看免费 | 丁香六月综合激情 | 一级免费大片 | 337p日本欧洲亚洲大胆张筱雨 | 午夜蜜桃视频 | 日韩中文字幕在线不卡 | 国产在线天堂 | 91激情网| 久爱视频在线观看 | 久久久久久久久久久久久国产 | www.欧美精品 | 久久精精品久久久久噜噜 | 亚洲无码精品在线播放 | 高清黄色一级片 | 91视频高清 | 超碰女| 国产视频入口 | 久久亚洲av成人无码国产电影 | 伊人9999 | 自拍视频网址 | free性护士vidos猛交 | 91不卡在线 | 99视频久 | 一区二区三区免费在线 | 伊人看片| 欧美极品jizzhd欧美仙踪林 | 日韩黄色影院 | 伊人亚洲综合 | 精品无码久久久久 | 一级片视频免费观看 | 国产三级福利 | 国产成人在线免费 | 蜜桃久久久aaaa成人网一区 | 噜噜狠狠狠狠综合久久 | 亚洲图片小说视频 | 韩国av一区二区三区 | 国产探花在线观看 | 在线香蕉视频 | 91污网站| 色图一区 | 丰满少妇在线观看网站 | 在线观看福利网站 | 爱情岛论坛自拍 | 久久作爱 |