运行截图:
把 cgi 编码转为 char * 类型
- // 把 cgi 编码转为 char * 类型
- char* change(char *str)
- {
- // 分配内存
- char *tempstr = malloc(strlen(str) + 1);
- //x 是 tempstr 的下标, y 是 str 的下标
- int x = 0, y = 0;
- char assii_1, assii_2;
- while (str[y])
- {
- if ((tempstr[x] = str[y]) == %)
- {
- // 获取第一个字符
- if (str[y + 1] >= A)
- {
- assii_1 = str[y + 1] - 55;
- }
- else
- {
- assii_1 = str[y + 1] - 48;
- }
- // 获取第二个字符
- if (str[y + 2] >= A)
- {
- assii_2 = str[y + 2] - 55;
- }
- else
- {
- assii_2 = str[y + 2] - 48;
- }
- tempstr[x] = assii_1 * 16 + assii_2;
- y += 2;
- }
- x++;
- y++;
- }
- // 最后一位置零
- tempstr[x] = \0;
- return tempstr;
- }
查询
- // 查询
- void showlist(char str[256])
- {
- printf("%s%s\n", str,str);
- // 文件指针
- FILE *pf;
- // 读取
- pf = fopen(strpath, "r");
- if (pf == NULL)
- {
- printf("文件打开失败");
- }
- else
- {
- // 没有到文件末尾就继续
- while (!feof(pf))
- {
- char readstr[1024] = { 0 };
- // 读取一行
- fgets(readstr, 1024, pf);
- // 字符串查找
- char *p = strstr(readstr, str);
- if (p != NULL)
- {
- // 输出到网页
- //puts(readstr);
- printf("%s",readstr);
- puts("<br>");
- }
- }
- fclose(pf);
- }
- }
主函数
- printf("Content-type:text/html\n\n");// 换行
- // 等待一下
- system("mkdir 1");
- // 获取表单的数据到 szpost 中 格式 cmd1=%BD%C8&cmd2=abc
- char szpost[256] = { 0 };
- gets(szpost);
- printf("%s", szpost);
- // 找到第一个输入框的内容
- char*p1 = strchr(szpost, &);
- if (p1 != NULL)
- {
- *p1 = \0;
- }
- // 输出相应的信息
- printf("<br>%s", szpost + 5);
- //cgi 编码格式转换为 char * 类型
- printf("<br>%s", change(szpost + 5));
- // 获取第二个输入框的内容
- char *p2 = strchr(p1 + 1, &);
- if (p2 != NULL)
- {
- *p2 = \0;
- }
- printf("<br>%s", p1 + 6);
- printf("<br>%s", change(p1 + 6));
- // 查询
- showlist(change(szpost + 5));
完整代码
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<stdlib.h>
- #include <string.h>
- // 把 cgi 编码转为 char * 类型
- char* change(char *str)
- {
- // 分配内存
- char *tempstr = malloc(strlen(str) + 1);
- //x 是 tempstr 的下标, y 是 str 的下标
- int x = 0, y = 0;
- char assii_1, assii_2;
- while (str[y])
- {
- if ((tempstr[x] = str[y]) == %)
- {
- // 获取第一个字符
- if (str[y + 1] >= A)
- {
- assii_1 = str[y + 1] - 55;
- }
- else
- {
- assii_1 = str[y + 1] - 48;
- }
- // 获取第二个字符
- if (str[y + 2] >= A)
- {
- assii_2 = str[y + 2] - 55;
- }
- else
- {
- assii_2 = str[y + 2] - 48;
- }
- tempstr[x] = assii_1 * 16 + assii_2;
- y += 2;
- }
- x++;
- y++;
- }
- // 最后一位置零
- tempstr[x] = \0;
- return tempstr;
- }
- // 定义路径
- char strpath[256] = "kaifang.txt";
- // 查询
- void showlist(char str[256])
- {
- printf("%s%s\n", str,str);
- // 文件指针
- FILE *pf;
- // 读取
- pf = fopen(strpath, "r");
- if (pf == NULL)
- {
- printf("文件打开失败");
- }
- else
- {
- // 没有到文件末尾就继续
- while (!feof(pf))
- {
- char readstr[1024] = { 0 };
- // 读取一行
- fgets(readstr, 1024, pf);
- // 字符串查找
- char *p = strstr(readstr, str);
- if (p != NULL)
- {
- // 输出到网页
- //puts(readstr);
- printf("%s",readstr);
- puts("<br>");
- }
- }
- fclose(pf);
- }
- }
- void main()
- {
- printf("Content-type:text/html\n\n");// 换行
- // 等待一下
- system("mkdir 1");
- // 获取表单的数据到 szpost 中 格式 cmd1=%BD%C8&cmd2=abc
- char szpost[256] = { 0 };
- gets(szpost);
- printf("%s", szpost);
- // 找到第一个输入框的内容
- char*p1 = strchr(szpost, &);
- if (p1 != NULL)
- {
- *p1 = \0;
- }
- // 输出相应的信息
- printf("<br>%s", szpost + 5);
- //cgi 编码格式转换为 char * 类型
- printf("<br>%s", change(szpost + 5));
- // 获取第二个输入框的内容
- char *p2 = strchr(p1 + 1, &);
- if (p2 != NULL)
- {
- *p2 = \0;
- }
- printf("<br>%s", p1 + 6);
- printf("<br>%s", change(p1 + 6));
- // 查询
- showlist(change(szpost + 5));
- }
来源: http://www.bubuko.com/infodetail-2501696.html