• 创建全局的二级指针

    1. char ** g_pp;//全局的二级指针
  • 获取数据有多少行
    1. //获取行数
    2. int getimax()
    3. {
    4. int hang = -;
    5. FILE *pf = fopen(path, "r");//读文件打开路径
    6. if (pf == NULL)
    7. {
    8. printf("文件打开失败");
    9. return -;
    10. }
    11. else
    12. {
    13. hang = ;
    14. while (!feof(pf))//到了文件末尾返回1,没有返回0
    15. {
    16. char readstr[] = { };
    17.  
    18. fgets(readstr, , pf);//读取一行
    19.  
    20. hang++;//自增
    21.  
    22. }
    23. fclose(pf);//关闭
    24. return hang;
    25. }
    26. }
  • 定义行数
    1. int imax = ;//标示有多少行
  • 载入内存
    1. void loadfromfile()
    2. {
    3.  
    4. g_pp = (char **)malloc(sizeof(char*)*imax); //分配指针数组
    5. memset(g_pp, '\0', sizeof(char*)*imax);//内存清零
    6.  
    7. FILE *pf = fopen(path, "r");//读文件打开路径
    8. if (pf == NULL)
    9. {
    10. printf("文件打开失败");
    11. return -;
    12. }
    13. else
    14. {
    15. for (int i = ; i < imax; i++)
    16. {
    17. char str[] = { };
    18. fgets(str, , pf);//按行读取
    19. str[ - ] = '\0';
    20. int strlength = strlen(str);
    21.  
    22. g_pp[i] = malloc(sizeof(char)*(strlength + ));//处理/0
    23.  
    24. if (g_pp[i] != NULL)
    25. {
    26. strcpy(g_pp[i], str);//拷贝到分配的内存
    27. }
    28. }
    29. fclose(pf);//关闭
    30. }
    31. }
  • 查询并写入到文件
    1. void search(char *str)
    2. {
    3. char strpath[] = { };
    4. sprintf(strpath, "I:\\%s.txt", str);
    5. FILE *pf = fopen(strpath, "w");//写的模式打开
    6.  
    7. if (g_pp != NULL)
    8. {
    9.  
    10. for (int i = ; i < imax; i++)
    11. {
    12. if (g_pp[i] != NULL)
    13. {
    14. char *p = strstr(g_pp[i], str);//找到返回地址,找不到返回null
    15. if (p != NULL)
    16. {
    17. puts(g_pp[i]);//打印
    18. fputs(g_pp[i], pf);//输出到文件
    19. }
    20. }
    21. }
    22. }
    23. fclose(pf);
    24. }
  • main
    1. loadfromfile();
    2. printf("Content-type:text/html\n\n");//换行
    3.  
    4. system("mkdir 1");
    5.  
    6. char szpost[] = { };
    7. gets(szpost);
    8. printf("%s", szpost);
    9.  
    10. char*p1 = strchr(szpost, '&');
    11. if (p1 != NULL)
    12. {
    13. *p1 = '\0';
    14. }
    15. printf("<br>%s", szpost + );
    16. printf("<br>%s", change(szpost + ));
    17.  
    18. char *p2 = strchr(p1 + , '&');
    19. if (p2 != NULL)
    20. {
    21. *p2 = '\0';
    22. }
    23. printf("<br>%s", p1 + );
    24. printf("<br>%s", change(p1 + ));
    25.  
    26. search(szpost + );//检索
  • cgi格式转换
    1. char* change(char *str)
    2. {
    3. char *tempstr = malloc(strlen(str) + );
    4. int x = , y = ;
    5. char assii_1, assii_2;
    6. while (tempstr[x])
    7. {
    8. if ((tempstr[x] = str[y]) == '%')
    9. {
    10. //y+1 y+2
    11. if (str[y + ] >= 'A')
    12. {
    13. assii_1 = str[y + ] - ;
    14.  
    15. }
    16. else
    17. {
    18. assii_1 = str[y + ] - ;
    19. }
    20. if (str[y + ] >= 'A')
    21. {
    22. assii_2 = str[y + ] - ;
    23. }
    24. else
    25. {
    26. assii_2 = str[y + ] - ;
    27. }
    28. tempstr[x] = assii_1 * + assii_2;
    29.  
    30. y += ;
    31.  
    32. }
    33. x++;
    34. y++;
    35. }
    36. tempstr[x] = '\0';
    37.  
    38. return tempstr;
    39. }

完整代码

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include<memory.h>
  6. #include <Windows.h>
  7. #define path "kaifang.txt"
  8.  
  9. char ** g_pp;//全局的二级指针
  10. int imax = ;//标示有多少行
  11.  
  12. //获取行数
  13. int getimax()
  14. {
  15. int hang = -;
  16. FILE *pf = fopen(path, "r");//读文件打开路径
  17. if (pf == NULL)
  18. {
  19. printf("文件打开失败");
  20. return -;
  21. }
  22. else
  23. {
  24. hang = ;
  25. while (!feof(pf))//到了文件末尾返回1,没有返回0
  26. {
  27. char readstr[] = { };
  28.  
  29. fgets(readstr, , pf);//读取一行
  30.  
  31. hang++;//自增
  32.  
  33. }
  34. fclose(pf);//关闭
  35. return hang;
  36. }
  37. }
  38.  
  39. char* change(char *str)
  40. {
  41. char *tempstr = malloc(strlen(str) + );
  42. int x = , y = ;
  43. char assii_1, assii_2;
  44. while (tempstr[x])
  45. {
  46. if ((tempstr[x] = str[y]) == '%')
  47. {
  48. //y+1 y+2
  49. if (str[y + ] >= 'A')
  50. {
  51. assii_1 = str[y + ] - ;
  52.  
  53. }
  54. else
  55. {
  56. assii_1 = str[y + ] - ;
  57. }
  58. if (str[y + ] >= 'A')
  59. {
  60. assii_2 = str[y + ] - ;
  61. }
  62. else
  63. {
  64. assii_2 = str[y + ] - ;
  65. }
  66. tempstr[x] = assii_1 * + assii_2;
  67.  
  68. y += ;
  69.  
  70. }
  71. x++;
  72. y++;
  73. }
  74. tempstr[x] = '\0';
  75.  
  76. return tempstr;
  77. }
  78.  
  79. void loadfromfile()
  80. {
  81.  
  82. g_pp = (char **)malloc(sizeof(char*)*imax); //分配指针数组
  83. memset(g_pp, '\0', sizeof(char*)*imax);//内存清零
  84.  
  85. FILE *pf = fopen(path, "r");//读文件打开路径
  86. if (pf == NULL)
  87. {
  88. printf("文件打开失败");
  89. return -;
  90. }
  91. else
  92. {
  93. for (int i = ; i < imax; i++)
  94. {
  95. char str[] = { };
  96. fgets(str, , pf);//按行读取
  97. str[ - ] = '\0';
  98. int strlength = strlen(str);
  99.  
  100. g_pp[i] = malloc(sizeof(char)*(strlength + ));//处理/0
  101.  
  102. if (g_pp[i] != NULL)
  103. {
  104. strcpy(g_pp[i], str);//拷贝到分配的内存
  105. }
  106. }
  107. fclose(pf);//关闭
  108. }
  109. }
  110.  
  111. void search(char *str)
  112. {
  113. char strpath[] = { };
  114. sprintf(strpath, "I:\\%s.txt", str);
  115. FILE *pf = fopen(strpath, "w");//写的模式打开
  116.  
  117. if (g_pp != NULL)
  118. {
  119.  
  120. for (int i = ; i < imax; i++)
  121. {
  122. if (g_pp[i] != NULL)
  123. {
  124. char *p = strstr(g_pp[i], str);//找到返回地址,找不到返回null
  125. if (p != NULL)
  126. {
  127. puts(g_pp[i]);//打印
  128. fputs(g_pp[i], pf);//输出到文件
  129. }
  130. }
  131. }
  132. }
  133. fclose(pf);
  134. }
  135.  
  136. void main()
  137. {
  138.  
  139. loadfromfile();
  140. printf("Content-type:text/html\n\n");//换行
  141.  
  142. system("mkdir 1");
  143.  
  144. char szpost[] = { };
  145. gets(szpost);
  146. printf("%s", szpost);
  147.  
  148. char*p1 = strchr(szpost, '&');
  149. if (p1 != NULL)
  150. {
  151. *p1 = '\0';
  152. }
  153. printf("<br>%s", szpost + );
  154. printf("<br>%s", change(szpost + ));
  155.  
  156. char *p2 = strchr(p1 + , '&');
  157. if (p2 != NULL)
  158. {
  159. *p2 = '\0';
  160. }
  161. printf("<br>%s", p1 + );
  162. printf("<br>%s", change(p1 + ));
  163.  
  164. search(szpost + );//检索
  165. }

81.内存模式实现cgi查询的更多相关文章

  1. Redis进阶实践之十八 使用管道模式提高Redis查询的速度

    原文:Redis进阶实践之十八 使用管道模式提高Redis查询的速度 一.引言             学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中 ...

  2. java运行时内存模式学习

    学习java运行时内存模式: 各区介绍: 方法区(线程共享):用于存放被虚拟机加载的类的元数据:静态变量,常量,以及编译和的代码(字节码),也称为永久代(所有该类的实例被回收,或者此类classLoa ...

  3. C++(十八) — 内存模式、堆和栈

    1.内存模式 一个程序执行时,先复制到内存,然后CPU逐句读取指令执行. 每个存储单元存放一个字节(8bit)数据,每个有一个唯一的地址,地址是顺序编码的.比如:一台计算机256MB内存,则有256* ...

  4. Redis进阶实践之十八 使用管道模式加速Redis查询

    一.引言             学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中批量的增加数据,肯定是大批量的,为了这主题,我从新找起了解决方案.目前 ...

  5. apache中配置php支持模块模式、cgi模式和fastcgi模式

    首先安装apache.mysql和php,依次顺序安装. 1.apache.mysql的安装比较简单,略过 2. php的安装,我安装的是php5.3.6内置了php-fpm,所以不需要再单独下补丁了 ...

  6. apache中配置php支持模块模式、cgi模式和fastcgi模式的实验

    首先安装apache.mysql和php,依次顺序安装. 1.apache.mysql的安装比较简单,略过 2. php的安装,我安装的是php5.3.6内置了php-fpm,所以不需要再单独下补丁了 ...

  7. Angular JS 学习笔记(自定义服务:factory,Promise 模式异步请求查询:$http,过滤器用法filter,指令:directive)

    刚学没多久,作了一个小项目APP,微信企业号开发与微信服务号的开发,使用的是AngularJS开发,目前项目1.0版本已经完结,但是项目纯粹为了赶工,并没有发挥AngularJS的最大作用,这几天项目 ...

  8. jvm运行时内存模式

    jvm内存模型 内存模型粗略划分为:堆和栈 详细划分为:堆,虚拟机栈,方法区,本地方法区,程序计数器 程序计数器: 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程 ...

  9. Java内存模式

    Java内存模型即Java Memory Model,简称JMM.JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式. JVM是Java Virtual Machine(Java ...

随机推荐

  1. 通过视频展示如何通过Samba配置PDC

    通过视频展示如何通过Samba配置PDC(Linux企业应用案例精解补充视频内容) 本文通过视频,真实地再现了在Linux平台下如何通过配置smb.conf文件而实现Samba Server模拟win ...

  2. A start job is running for Network Manager wait online (29s / no limit) 等待30s解决办法

    电脑安装openSUSE42.3和 Ubuntu16.04 双系统,当电脑插上网线后开机会出现A start job is running for Network Manager wait onlin ...

  3. CSDN博客给我带来的一些诱惑和选择机会(二):HR“邀请于我”,猎头“有求于我”

    上次,2013年10月8日 ,分享了一篇颇具"正能量"的文章CSDN博客给我带来的一些诱惑和选择机会,获得了很好的正面效果. 10月份,又发生了很多有趣.有意义的事情. 其中,有一 ...

  4. LRJ入门经典-0907万圣节的小L306

    原题 LRJ入门经典-0907万圣节的小L306 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 今天是万圣节,小L同学开始了 ...

  5. Spark MLlib聚类KMeans

    算法说明 聚类(Cluster analysis)有时也被翻译为簇类,其核心任务是:将一组目标object划分为若干个簇,每个簇之间的object尽可能相似,簇与簇之间的object尽可能相异.聚类算 ...

  6. ToString DateTime 操作

    来源:网络 字符型转换为字符串// C 货币 2.5.ToString("C"); // ¥2.50 // D 10进制数 25.ToString("D5"); ...

  7. Kinect 开发 —— 骨骼数据与彩色影像和深度影像的对齐

    在显示彩色影像和深度影像时最好使用WriteableBitmap对象: 要想将骨骼数据影像和深度影像,或者彩色影像叠加到一起,首先要确定深度影像的分辨率和大小,为了方便,这里将深度影像数据和彩色影像数 ...

  8. Json应用案例

    Json应用案例之FastJson   这几天在网上找关于Json的一些案例,无意当中找到了一个我个人感觉比较好的就是阿里巴巴工程师写的FastJson. package com.jerehedu.f ...

  9. ACTIVATE STANDBY

    ACTIVATE STANDBY 在有些场景下我们需要激活standby为primary,使用激活的standby完成一些的需求. 如: - 拿激活后的standby做应用测试. - primary宕 ...

  10. 004 python 流程控制语句

    流程控制语句 1.if判断 语法 a = 10,b = 20# 1if a == 10:  print('a等于10')# 2if a > b:  print('a大于b')else:  pri ...