81.内存模式实现cgi查询
- 创建全局的二级指针
- char ** g_pp;//全局的二级指针
- 获取数据有多少行
- //获取行数
- int getimax()
- {
- int hang = -;
- FILE *pf = fopen(path, "r");//读文件打开路径
- if (pf == NULL)
- {
- printf("文件打开失败");
- return -;
- }
- else
- {
- hang = ;
- while (!feof(pf))//到了文件末尾返回1,没有返回0
- {
- char readstr[] = { };
- fgets(readstr, , pf);//读取一行
- hang++;//自增
- }
- fclose(pf);//关闭
- return hang;
- }
- }
- //获取行数
- 定义行数
- int imax = ;//标示有多少行
- 载入内存
- void loadfromfile()
- {
- g_pp = (char **)malloc(sizeof(char*)*imax); //分配指针数组
- memset(g_pp, '\0', sizeof(char*)*imax);//内存清零
- FILE *pf = fopen(path, "r");//读文件打开路径
- if (pf == NULL)
- {
- printf("文件打开失败");
- return -;
- }
- else
- {
- for (int i = ; i < imax; i++)
- {
- char str[] = { };
- fgets(str, , pf);//按行读取
- str[ - ] = '\0';
- int strlength = strlen(str);
- g_pp[i] = malloc(sizeof(char)*(strlength + ));//处理/0
- if (g_pp[i] != NULL)
- {
- strcpy(g_pp[i], str);//拷贝到分配的内存
- }
- }
- fclose(pf);//关闭
- }
- }
- void loadfromfile()
- 查询并写入到文件
- void search(char *str)
- {
- char strpath[] = { };
- sprintf(strpath, "I:\\%s.txt", str);
- FILE *pf = fopen(strpath, "w");//写的模式打开
- if (g_pp != NULL)
- {
- for (int i = ; i < imax; i++)
- {
- if (g_pp[i] != NULL)
- {
- char *p = strstr(g_pp[i], str);//找到返回地址,找不到返回null
- if (p != NULL)
- {
- puts(g_pp[i]);//打印
- fputs(g_pp[i], pf);//输出到文件
- }
- }
- }
- }
- fclose(pf);
- }
- void search(char *str)
- main
- loadfromfile();
- printf("Content-type:text/html\n\n");//换行
- system("mkdir 1");
- char szpost[] = { };
- gets(szpost);
- printf("%s", szpost);
- char*p1 = strchr(szpost, '&');
- if (p1 != NULL)
- {
- *p1 = '\0';
- }
- printf("<br>%s", szpost + );
- printf("<br>%s", change(szpost + ));
- char *p2 = strchr(p1 + , '&');
- if (p2 != NULL)
- {
- *p2 = '\0';
- }
- printf("<br>%s", p1 + );
- printf("<br>%s", change(p1 + ));
- search(szpost + );//检索
- loadfromfile();
- cgi格式转换
- char* change(char *str)
- {
- char *tempstr = malloc(strlen(str) + );
- int x = , y = ;
- char assii_1, assii_2;
- while (tempstr[x])
- {
- if ((tempstr[x] = str[y]) == '%')
- {
- //y+1 y+2
- if (str[y + ] >= 'A')
- {
- assii_1 = str[y + ] - ;
- }
- else
- {
- assii_1 = str[y + ] - ;
- }
- if (str[y + ] >= 'A')
- {
- assii_2 = str[y + ] - ;
- }
- else
- {
- assii_2 = str[y + ] - ;
- }
- tempstr[x] = assii_1 * + assii_2;
- y += ;
- }
- x++;
- y++;
- }
- tempstr[x] = '\0';
- return tempstr;
- }
- char* change(char *str)
完整代码
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include<memory.h>
- #include <Windows.h>
- #define path "kaifang.txt"
- char ** g_pp;//全局的二级指针
- int imax = ;//标示有多少行
- //获取行数
- int getimax()
- {
- int hang = -;
- FILE *pf = fopen(path, "r");//读文件打开路径
- if (pf == NULL)
- {
- printf("文件打开失败");
- return -;
- }
- else
- {
- hang = ;
- while (!feof(pf))//到了文件末尾返回1,没有返回0
- {
- char readstr[] = { };
- fgets(readstr, , pf);//读取一行
- hang++;//自增
- }
- fclose(pf);//关闭
- return hang;
- }
- }
- char* change(char *str)
- {
- char *tempstr = malloc(strlen(str) + );
- int x = , y = ;
- char assii_1, assii_2;
- while (tempstr[x])
- {
- if ((tempstr[x] = str[y]) == '%')
- {
- //y+1 y+2
- if (str[y + ] >= 'A')
- {
- assii_1 = str[y + ] - ;
- }
- else
- {
- assii_1 = str[y + ] - ;
- }
- if (str[y + ] >= 'A')
- {
- assii_2 = str[y + ] - ;
- }
- else
- {
- assii_2 = str[y + ] - ;
- }
- tempstr[x] = assii_1 * + assii_2;
- y += ;
- }
- x++;
- y++;
- }
- tempstr[x] = '\0';
- return tempstr;
- }
- void loadfromfile()
- {
- g_pp = (char **)malloc(sizeof(char*)*imax); //分配指针数组
- memset(g_pp, '\0', sizeof(char*)*imax);//内存清零
- FILE *pf = fopen(path, "r");//读文件打开路径
- if (pf == NULL)
- {
- printf("文件打开失败");
- return -;
- }
- else
- {
- for (int i = ; i < imax; i++)
- {
- char str[] = { };
- fgets(str, , pf);//按行读取
- str[ - ] = '\0';
- int strlength = strlen(str);
- g_pp[i] = malloc(sizeof(char)*(strlength + ));//处理/0
- if (g_pp[i] != NULL)
- {
- strcpy(g_pp[i], str);//拷贝到分配的内存
- }
- }
- fclose(pf);//关闭
- }
- }
- void search(char *str)
- {
- char strpath[] = { };
- sprintf(strpath, "I:\\%s.txt", str);
- FILE *pf = fopen(strpath, "w");//写的模式打开
- if (g_pp != NULL)
- {
- for (int i = ; i < imax; i++)
- {
- if (g_pp[i] != NULL)
- {
- char *p = strstr(g_pp[i], str);//找到返回地址,找不到返回null
- if (p != NULL)
- {
- puts(g_pp[i]);//打印
- fputs(g_pp[i], pf);//输出到文件
- }
- }
- }
- }
- fclose(pf);
- }
- void main()
- {
- loadfromfile();
- printf("Content-type:text/html\n\n");//换行
- system("mkdir 1");
- char szpost[] = { };
- gets(szpost);
- printf("%s", szpost);
- char*p1 = strchr(szpost, '&');
- if (p1 != NULL)
- {
- *p1 = '\0';
- }
- printf("<br>%s", szpost + );
- printf("<br>%s", change(szpost + ));
- char *p2 = strchr(p1 + , '&');
- if (p2 != NULL)
- {
- *p2 = '\0';
- }
- printf("<br>%s", p1 + );
- printf("<br>%s", change(p1 + ));
- search(szpost + );//检索
- }
81.内存模式实现cgi查询的更多相关文章
- Redis进阶实践之十八 使用管道模式提高Redis查询的速度
原文:Redis进阶实践之十八 使用管道模式提高Redis查询的速度 一.引言 学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中 ...
- java运行时内存模式学习
学习java运行时内存模式: 各区介绍: 方法区(线程共享):用于存放被虚拟机加载的类的元数据:静态变量,常量,以及编译和的代码(字节码),也称为永久代(所有该类的实例被回收,或者此类classLoa ...
- C++(十八) — 内存模式、堆和栈
1.内存模式 一个程序执行时,先复制到内存,然后CPU逐句读取指令执行. 每个存储单元存放一个字节(8bit)数据,每个有一个唯一的地址,地址是顺序编码的.比如:一台计算机256MB内存,则有256* ...
- Redis进阶实践之十八 使用管道模式加速Redis查询
一.引言 学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中批量的增加数据,肯定是大批量的,为了这主题,我从新找起了解决方案.目前 ...
- apache中配置php支持模块模式、cgi模式和fastcgi模式
首先安装apache.mysql和php,依次顺序安装. 1.apache.mysql的安装比较简单,略过 2. php的安装,我安装的是php5.3.6内置了php-fpm,所以不需要再单独下补丁了 ...
- apache中配置php支持模块模式、cgi模式和fastcgi模式的实验
首先安装apache.mysql和php,依次顺序安装. 1.apache.mysql的安装比较简单,略过 2. php的安装,我安装的是php5.3.6内置了php-fpm,所以不需要再单独下补丁了 ...
- Angular JS 学习笔记(自定义服务:factory,Promise 模式异步请求查询:$http,过滤器用法filter,指令:directive)
刚学没多久,作了一个小项目APP,微信企业号开发与微信服务号的开发,使用的是AngularJS开发,目前项目1.0版本已经完结,但是项目纯粹为了赶工,并没有发挥AngularJS的最大作用,这几天项目 ...
- jvm运行时内存模式
jvm内存模型 内存模型粗略划分为:堆和栈 详细划分为:堆,虚拟机栈,方法区,本地方法区,程序计数器 程序计数器: 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程 ...
- Java内存模式
Java内存模型即Java Memory Model,简称JMM.JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式. JVM是Java Virtual Machine(Java ...
随机推荐
- 通过视频展示如何通过Samba配置PDC
通过视频展示如何通过Samba配置PDC(Linux企业应用案例精解补充视频内容) 本文通过视频,真实地再现了在Linux平台下如何通过配置smb.conf文件而实现Samba Server模拟win ...
- 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 ...
- CSDN博客给我带来的一些诱惑和选择机会(二):HR“邀请于我”,猎头“有求于我”
上次,2013年10月8日 ,分享了一篇颇具"正能量"的文章CSDN博客给我带来的一些诱惑和选择机会,获得了很好的正面效果. 10月份,又发生了很多有趣.有意义的事情. 其中,有一 ...
- LRJ入门经典-0907万圣节的小L306
原题 LRJ入门经典-0907万圣节的小L306 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 今天是万圣节,小L同学开始了 ...
- Spark MLlib聚类KMeans
算法说明 聚类(Cluster analysis)有时也被翻译为簇类,其核心任务是:将一组目标object划分为若干个簇,每个簇之间的object尽可能相似,簇与簇之间的object尽可能相异.聚类算 ...
- ToString DateTime 操作
来源:网络 字符型转换为字符串// C 货币 2.5.ToString("C"); // ¥2.50 // D 10进制数 25.ToString("D5"); ...
- Kinect 开发 —— 骨骼数据与彩色影像和深度影像的对齐
在显示彩色影像和深度影像时最好使用WriteableBitmap对象: 要想将骨骼数据影像和深度影像,或者彩色影像叠加到一起,首先要确定深度影像的分辨率和大小,为了方便,这里将深度影像数据和彩色影像数 ...
- Json应用案例
Json应用案例之FastJson 这几天在网上找关于Json的一些案例,无意当中找到了一个我个人感觉比较好的就是阿里巴巴工程师写的FastJson. package com.jerehedu.f ...
- ACTIVATE STANDBY
ACTIVATE STANDBY 在有些场景下我们需要激活standby为primary,使用激活的standby完成一些的需求. 如: - 拿激活后的standby做应用测试. - primary宕 ...
- 004 python 流程控制语句
流程控制语句 1.if判断 语法 a = 10,b = 20# 1if a == 10: print('a等于10')# 2if a > b: print('a大于b')else: pri ...