运行截图:

  • 把cgi编码转为char*类型

     //把cgi编码转为char*类型
    char* change(char *str)
    {
    //分配内存
    char *tempstr = malloc(strlen(str) + ); //x是tempstr的下标,y是str的下标
    int x = , y = ;
    char assii_1, assii_2;
    while (str[y])
    {
    if ((tempstr[x] = str[y]) == '%')
    {
    //获取第一个字符
    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 showlist(char str[])
    { printf("%s%s\n", str,str);
    //文件指针
    FILE *pf;
    //读取
    pf = fopen(strpath, "r"); if (pf == NULL)
    {
    printf("文件打开失败");
    }
    else
    {
    //没有到文件末尾就继续
    while (!feof(pf))
    {
    char readstr[] = { };
    //读取一行
    fgets(readstr, , 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[] = { };
    gets(szpost);
    printf("%s", szpost); //找到第一个输入框的内容
    char*p1 = strchr(szpost, '&');
    if (p1 != NULL)
    {
    *p1 = '\0';
    }
    //输出相应的信息
    printf("<br>%s", szpost + );
    //cgi编码格式转换为char*类型
    printf("<br>%s", change(szpost + )); //获取第二个输入框的内容
    char *p2 = strchr(p1 + , '&');
    if (p2 != NULL)
    {
    *p2 = '\0';
    }
    printf("<br>%s", p1 + );
    printf("<br>%s", change(p1 + )); //查询
    showlist(change(szpost + ));

完整代码

 #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) + ); //x是tempstr的下标,y是str的下标
int x = , y = ;
char assii_1, assii_2;
while (str[y])
{
if ((tempstr[x] = str[y]) == '%')
{
//获取第一个字符
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 strpath[] = "kaifang.txt"; //查询
void showlist(char str[])
{ printf("%s%s\n", str,str);
//文件指针
FILE *pf;
//读取
pf = fopen(strpath, "r"); if (pf == NULL)
{
printf("文件打开失败");
}
else
{
//没有到文件末尾就继续
while (!feof(pf))
{
char readstr[] = { };
//读取一行
fgets(readstr, , 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[] = { };
gets(szpost);
printf("%s", szpost); //找到第一个输入框的内容
char*p1 = strchr(szpost, '&');
if (p1 != NULL)
{
*p1 = '\0';
}
//输出相应的信息
printf("<br>%s", szpost + );
//cgi编码格式转换为char*类型
printf("<br>%s", change(szpost + )); //获取第二个输入框的内容
char *p2 = strchr(p1 + , '&');
if (p2 != NULL)
{
*p2 = '\0';
}
printf("<br>%s", p1 + );
printf("<br>%s", change(p1 + )); //查询
showlist(change(szpost + ));
}

79.cgi硬盘查询个人信息的更多相关文章

  1. WMI技术介绍和应用——查询硬件信息

    //查询得到系统盘所在硬盘的ID SELECT DiskIndex FROM Win32_DiskPartition WHERE Bootable = TRUE //如何使用WMI查询系统盘所在硬盘的 ...

  2. 实战DeviceIoControl 之四:获取硬盘的详细信息

    Q 用IOCTL_DISK_GET_DRIVE_GEOMETRY或IOCTL_STORAGE_GET_MEDIA_TYPES_EX只能得到很少的磁盘参数,我想获得包括硬盘序列号在内的更加详细的信息,有 ...

  3. bat命令查询硬件信息

    bat命令查询硬件信息 50 需求是这样的写一个bat命令,当命令执行的时候,先请用户输入姓名,然后继续执行查询出以下信息并写入一个文件,文件名称随便,文件可以放在与当前命令同一个文件夹下.最终文件中 ...

  4. 实战DeviceIoControl系列之四:获取硬盘的详细信息

    Q 用IOCTL_DISK_GET_DRIVE_GEOMETRY IOCTL_STORAGE_GET_MEDIA_TYPES_EX只能得到很少的磁盘参数,我想获得包括硬盘序列号在内的更加详细的信息,有 ...

  5. SQL Server2016 新功能实时查询统计信息

    SQL Server2016 新功能实时查询统计信息 很多时候有这样的场景,开发抱怨DBA没有调优好数据库,DBA抱怨开发写的程序代码差,因此,DBA和开发都成为了死对头,无法真正排查问题. DBA只 ...

  6. 16进制ascii码转化为对应的字符,付ipmitool查询硬件信息

    最近工作需要在用ipmitool查询服务器硬件信息.ipmitool查询硬件信息 比如电源,使用命令: 获取PSU0信息:Ipmitool raw 0x3a 0x71 0x00: 获取PSU1信息:I ...

  7. 【Gerrit】Gerrit cmd query (gerrit命令行查询change信息)

    本文仅展现个人使用情况和理解,英文原址:https://review.openstack.org/Documentation/cmd-query.html 基本使用格式: ssh -p <por ...

  8. Asp.Net MVC4入门指南(9):查询详细信息和删除记录

    在本教程中,您将查看自动生成的Details和Delete方法. 查询详细信息和删除记录 打开Movie控制器并查看Details方法. public ActionResult Details(int ...

  9. SQL查询数据库信息, 数据库表名, 数据库表信息

    SQL查询数据库信息, 数据库表名, 数据库表信息 ---------------------------------------------- -- 以下例子, 在sql_server 中可以直接运 ...

随机推荐

  1. POJ 3626 BFS

    思路:easy BFS //By SiriusRen #include <queue> #include <cstdio> #include <algorithm> ...

  2. 洛谷P4051 [JSOI2007]字符加密

    题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法. 例如‘JSOI07’,可以读作 ...

  3. C#中如何获得两个日期之间的天数差

    DateTime d1; DateTime d2; //自己去赋值吧 int days = (d1 - d2).Days;//天数差 label1.Text = "2012-1-1 15:3 ...

  4. SCOPE_IDENTITY()和 SELECT @@IDENTITY 的用法

    这俩个,是在插入数据的时候使用,返回刚刚插入数据行的ID 大家慎用@@IDENTITY,而尽量采用 SCOPE_IDENTITY() 函数替换之. SCOPE_IDENTITY()  也是得到最后一条 ...

  5. react基础用法一(在标签中渲染元素)

    react基础用法一(渲染元素) 如图所示最简单的变量使用方法 格式 let 变量名称 = 赋值: 渲染格式直接用 {变量名称} 就可以直接渲染到页面 如图所示第二种渲染方法 格式 const 变量名 ...

  6. boost.property_tree的高级用法(你们没见过的操作)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 前一阵写项目,终于将这个boost下的xml读取类完成了,由于网上对property_trees的讲解很少,最多也就到get_child这个层面, ...

  7. OpenCascade Sweep Algorithm

    OpenCascade Sweep Algorithm eryar@163.com Abstract. Sweeps are the objects you obtain by sweeping a ...

  8. 整理一些PHP开发安全问题

    整理一些PHP开发安全问题 php给了开发人员极大的灵活性,可是这也为安全问题带来了潜在的隐患.最近须要总结一下以往的问题,在这里借翻译一篇文章同一时候加上自己开发的一些感触总结一下. 简单介绍 当开 ...

  9. PHP的模板引擎smarty原理是什么(整理)

    PHP的模板引擎smarty原理是什么(整理) 一.总结 一句话总结:其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者混合为一个ph ...

  10. 72.调用req.flash('error', '用户已存在!'); 时候 报错 "req.flash is not a function"

    在app.js 中调用app.use 的顺序有关 app.use(session({ secret: settings.cookieSecret, key: settings.db,//cookie ...