• C语言:命令行参数


    命令行参数

    在图形界面普及之前都使用命令行界面。DOS和UNIX就是例子。Linux终端提供类UNIX命令行环境。

    命令行(command line)是在命令行环境中,用户为运行程序输入命令的行。命令行参数(command-line argument)是同一行的附加项。

    例如:

    demo.exe hello world
    

    C语言程序可以读取并使用这些附加项,如下图:

    image-20220829174033199

    下面是一个典型例子:通过main的参数来读取这些附加项。

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        int count;
        printf("count of arg: %d\n", argc - 1);
        for (count = 1; count < argc; ++count) {
            printf("%d: %s\n", count, argv[count]);
        }
        printf("\n");
        return 1;
    }
    

    将程序编译成可执行文件,并运行:

    image-20220829174320208

    说明:

    C编译器允许main()没有参数或者有两个参数(一些实现允许main()拥有更多参数,属于对标准的扩展)。main函数有两个参数时,第一个参数是命令行中字符串数量。(过去,这个int类型参数被称为argc)。系统用空格表示一个字符串的结束和下一个字符串的开始。

    上面demo示例中包括命令名一共有三个字符串,其中两个供demo示例使用。

    该程序把命令行字符串存储在内存中,并把每个字符串的地址存储在指针数组中,该数组的地址被存储在main()的第二个参数中,这个指向指针的指针成为argv(表示参数值)。

    如果系统允许(一些操作系统不允许这样),就把程序本身的名称赋给argv[0],然后把随后的第1个字符串赋给argv[1],以此类推。

    在我们的例子中,有下面的关系:

    argv[0] 指向 c_demo2.exe
    argv[1] 指向 hello
    argv[2] 指向 world
    

    main()中形参形式与其他带形参的函数相同,许多程序员用不同的形式声明argv

    char **argvchar *argv[]等价,因为argv是一个指向指针的指针。

    int main(int argc, char **argv)
    

    顺带一提,许多环境(包括UNIX和DOS)都允许用双引号把多个单词括起来形成一个参数。例如:

    c_demo2.exe "hello world" abc
    

    这行命令行参数把字符串"hello world"复制给argv[1]abc赋值给argv[2]

  • 相关阅读:
    EF框架开发后台错误问题集合
    如何实践MVP+RxJava+Retrofit(1)
    Android的FixScrollView自定义控件
    那些React-Native踩过的的坑
    P3105 [USACO14OPEN]公平的摄影Fair Photography
    模板合集
    关于最近情况的说明
    落谷P3941 入阵曲
    51nod 1952 栈
    BZOJ 2298: [HAOI2011]problem a
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/16636842.html
Copyright © 2020-2023  润新知