• C语言main函数的参数



    程序运行的时候,有些需要带参数,有些不带参数,例如linux操作系统的命令,它们本质上就是C程序。

    1)Linux命令中,无参数的不多。

    pwd  #显示当前目录
    clear  #清屏
    

    2)大部Linux命令是带参数的。

    cp  book1.c book2.c
    mkdir /tmp/dname
    mv book3 /tmp/dname/book3
    rm -rf /tmp/dname
    

    各位现在是在C语言学习的初级阶段,编写的C程序非常简单,运行不需要参数,但是在实际开发中,main函数一般都需要参数,没有参数的情况极少。

    main函数的参数是从命令提示符下执行程序的时候传入,例如ls 命令。

    在这里插入图片描述

    在以上示例中ls命令有两个参数,-l和book1?.c。

    一、main函数的参数

    main函数有三个参数,argc、argv和envp,它的标准写法如下:

    int main(int argc,char *argv[],char *envp[])
    

    int argc,存放了命令行参数的个数。

    char *argv[],是个字符串的数组,每个元素都是一个字符指针,指向一个字符串,即命令行中的每一个参数。

    char *envp[],也是一个字符串的数组,这个数组的每一个元素是指向一个环境变量的字符指针。

    envp先放一下,先讲argc和argv。

    示例(book101.c)

    /*
     * 程序名:book101.c,此程序演示main函数的参数。
     * 作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
      int ii=0;
    
      // 显示参数的个数
      printf("argc is %d
    ",argc);
    
      // 列出全部的参数
      for (ii=0;ii<argc;ii++)
      {
        printf("argv[%d] is %s
    ",ii,argv[ii]);
      }
    }
    

    运行结果

    在这里插入图片描述

    注意几个事项:

    1)argc的值是参数个数加1,因为程序名称是程序的第一个参数,即argv[0],在上面的示例中,argv[0]是./book101。

    2)main函数的参数,不管是书写的整数还是浮点数,全部被认为是字符串。

    3)参数的命名argc和argv是程序员的约定,您也可以用argd或args,但是不建议这么做。

    二、C程序的规范写法

    先假设程序执行都是有参数的,也就是说main函数都有参数,那么使用者怎么知道程序的参数个数和含义,记住它?看使用手册?不是,优秀的程序员会在程序中提供说明文字。我们先来看一个例子。

    示例(book103.c)

    /*
     * 程序名:book103.c,此程序演示main函数的参数。
     * 作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
      if (argc!=6)
      {
        printf("
    这是一个超女选秀程序,根据提供的超女信息,判断"
               "她是否符合王妃的标准。
    
    ");
        printf("用法:./book103 name age height sc yz
    ");
        printf("例如:./book103 西施 22 170 火辣 漂亮
    ");
        printf("name   超女的姓名。
    ");
        printf("age    超女的年龄。
    ");
        printf("height 超女的身高,单位:cm。
    ");
        printf("sc     超女的身材,火辣;普通;飞机场。
    ");
        printf("yz     超女的颜值,漂亮;一般;歪瓜裂枣。
    
    ");
    
        return -1;
      }
    
      printf("您输入的超女信息是:姓名(%s),年龄(%s),身高(%s),身材(%s),颜值(%s)。
    ",
              argv[1],argv[2],argv[3],argv[4],argv[5]);
    
      printf("正在计算中,请稍候......
    ");
    
      if (((atoi(argv[2]) >=  20) && (atoi(argv[2]) <=  30)) &&  // 年龄在20-30之间
          ((atoi(argv[3]) >= 165) && (atoi(argv[3]) <= 175)) &&  // 身高在165-175之间
          ((strcmp(argv[4],"火辣")==0)                     ) &&  // 身材火辣
          ((strcmp(argv[5],"漂亮")==0)                     ))    // 颜值漂亮
      {
        printf("超女(%s)选秀合格,送往后宫。
    ",argv[1]); return 0;
      }
      else
      {
        printf("超女(%s)选秀不合格,发放五两银子后送回家。
    ", argv[1]); return 0;
      }
    }
    

    运行程序的时候,如果参数不符,运行效果如下。

    在这里插入图片描述

    如果参数个数相符,运行效果如下。

    在这里插入图片描述

    从以上的例子可以看出,如果执行程序的时候提供的参数与设计不符,显示程序的使用说明,说明文字应该包括程序的功能和全部参数的解释,还可以包括作者、联系方式等更详细的信息。

    程序的使用说明文字非常重要,有几个原因:

    1)程序的使用者不一定会写程序,也没必要去查使用手册等资料;

    2)程序的使用者就算会写程序,也没必要在使用的时候去看源代码,并且,您也不一定想让他看到源代码;

    3)如果程序的使用者是您自己,时间一长,您也会忘记程序的参数。

    当然,这些只是程序员的约定,不是C语言的规定。

    三、envp参数

    envp存放了当前程序运行环境的参数。

    示例(book105.c)

    /*
     * 程序名:book105.c,此程序用于演示当前程序运行环境的参数envp。
     * 作者:C语言技术网(www.freecplus.net) 日期:20190525
    */
    #include <stdio.h>
    
    int main(int argc,char *argv[],char *envp[])
    {
      int ii = 0;
    
      while (envp[ii] != 0)  // 数组最后一个元素是0
      {
        printf("%s
    ",envp[ii]); ii++;
      }
    }
    

    运行效果

    在这里插入图片描述

    注意了,book105运行的结果与linux系统的env命令相同。

    在实际开发中,envp参数的应用场景不多,各位了解一下就行了。

    四、课后作业

    编写示例程序,把本章节介绍的知识点全部演示一遍,用程序演示可以加深您的理解和映象。

    五、版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
    来源:C语言技术网(www.freecplus.net)
    作者:码农有道

    如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

  • 相关阅读:
    RocketMQ延迟消息的代码实战及原理分析
    如何做技术选型?Sentinel 还是 Hystrix?
    什么是服务熔断?
    降级-熔断-限流-傻傻分不清楚
    java-分布式-降级 熔断 限流
    java-分布式-分布式事务
    常用限流算法的应用场景和实现原理
    使用Redis作为分布式锁的一些注意点
    ansible {{}}引用变量,变量中嵌套变量如何表示
    shell获得java进程号跟进程对应的线程号
  • 原文地址:https://www.cnblogs.com/wucongzhou/p/12498777.html
Copyright © 2020-2023  润新知