• C Primer Plus(6) 中文版 第11章 字符串和字符串函数 11.8 命令行参数


    11.8 命令行参数
    在图形界面普及之前都使用命令行界面。Linux终端提供类UNIX命令行环境。命令行(command line)是在命令行环境中,用户为运行程序输入命令的行。假设一个文件中有一个名为fuss的程序。在UNIX环境中运行该程序的命令行是:
    $ fuss
    或者在Windows命令提示模式下是:
    C> fuss
    命令行参数(command-line argument)是同一行的附加项。如下例:
    $ fuss -r Ginger
    一个C程序可以读取并使用这些附加项。
    repeat是一个可执行文件:
    /*repeat.c*/ 
    int main( int argc, char *argv[] ) 
    {
        ...
    }
    命令行输入为:repeat I'm fine
    argv[0] --- repeat
    argv[1] --- I'm
    argv[2] --- fine
    argv --- 3个字符串
    /* repeat.c -- main() with arguments */
    #include
    int main(int argc, char *argv[])
    {
        int count;
        
        printf("The command line has %d arguments:\n", argc - 1);
        for (count = 1; count < argc; count++)
            printf("%d: %s\n", count, argv[count]);
        printf("\n");
        
        return 0;

    /* 输出:

    */

    C编译器允许main()没有参数或者有两个参数(一些实现允许main()有更多参数,属于对标准的扩展)main()有两个参数时,第1个参数时命令行中的字符串数量。过去,这个int类型的参数被称为argc(表示参数计数(argument count)。系统用空格表示一个字符串的结束和下一个字符串的开始。因此,上面的repeat示例中包含3个字符串,其中后2个供repeat使用。该程序把命令行字符串存储在内存中,并把每个字符串的地址存储在指针数组中。而该数组的地址则被存储在main()的第2个参数中。按照惯例,这个指向指针的指针argv(表示参数值[argument value])。如果系统允许(一些操作系统不允许这样),就把程序本身的名称赋给argv[0],然后把随后的第1个字符串赋给argv[1],以此类推。
    main()中的形参形式与其他带参数的函数相同。许多程序员用不同的形式声明argv: 
    int main( int argc, char *argv[] )
    char **argv与char *argv[]等价。也就是说,argv是一个指向指针的指针,它所指向的指针指向char。因此,即使在原始定义中,argv也是指向指针(该指针指向char)的指针。两种形式都可以使用,但我们认为第1种形式更清楚地表明argv表示一系列字符串。
    顺带一提,许多环境(包括UNIX和DOS)都允许用双引号把多个单词括起来形成一个参数。例如:
    repeat "I'm hungry" now
    argv[1] --- I'm hungry
    argv[2] --- now
    11.8.1 继承环境中的命令行参数
    Windows继承环境都不用命令行运行程序。有些环境中有项目对话框,为特定项目指定命令行参数。其他环境中,可以在IDE中编译程序,然后打开MS-DOS窗口在命令行模式中运行程序。但是,如果你的系统有一个运行命令行的编译器(如GCC)会更简单。
    11.8.2 Mccintosh中的命令行参数 
    进入Mac的Terminal模式和UNIX的命令行环境。然后,可以找到程序可执行代码的目录(UNIX的文件夹),或者下载命令行工具,使用gcc或clang编译程序。 
      

  • 相关阅读:
    Unity的PICO项目基础环境搭建笔记(调试与构建应用篇)
    【Apollo】开启Apollo之旅:让自动驾驶如此简单
    【Java异常易错点】try或catch语句块中return后,finally还会执行吗?
    linux开启交换空间
    【毕业设计】基于单片机的指纹识别考勤系统 - 物联网 stm32
    iPhone 12电池寿命结果:四款机型都进行了比较
    HTTP状态码
    Reactor
    TDengine3.0 新架构设计思路
    结构体大小的计算(结构体内存对齐)
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126283301