进入 nav导航


123123 官方发布-文章系统
37| 查看详情 | 编辑更新

命令行参数

执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。

命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数组,指向传递给程序的每个参数。下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行相应的动作:

#include <stdio.h>int main( int argc, char *argv[] )  {
   if( argc == 2 )
   {
      printf("The argument supplied is %s\n", argv[1]);
   }
   else if( argc > 2 )
   {
      printf("Too many arguments supplied.\n");
   }
   else
   {
      printf("One argument expected.\n");
   }}

使用一个参数,编译并执行上面的代码,它会产生下列结果:

$./a.out testingThe argument supplied is testing

使用两个参数,编译并执行上面的代码,它会产生下列结果:

$./a.out testing1 testing2Too many arguments supplied.

不传任何参数,编译并执行上面的代码,它会产生下列结果:

$./a.outOne argument expected

应当指出的是,argv[0] 存储程序的名称,argv[1] 是一个指向第一个命令行参数的指针,*argv[n] 是最后一个参数。如果没有提供任何参数,argc 将为 1,否则,如果传递了一个参数,argc 将被设置为 2。

多个命令行参数之间用空格分隔,但是如果参数本身带有空格,那么传递参数的时候应把参数放置在双引号 "" 或单引号 '' 内部。让我们重新编写上面的实例,有一个空间,那么你可以通过这样的观点,把它们放在双引号或单引号""""。让我们重新编写上面的实例,向程序传递一个放置在双引号内部的命令行参数:

#include <stdio.h>int main( int argc, char *argv[] )  {
   printf("Program name %s\n", argv[0]);
 
   if( argc == 2 )
   {
      printf("The argument supplied is %s\n", argv[1]);
   }
   else if( argc > 2 )
   {
      printf("Too many arguments supplied.\n");
   }
   else
   {
      printf("One argument expected.\n");
   }}

使用一个用空格分隔的简单参数,参数括在双引号中,编译并执行上面的代码,它会产生下列结果:

$./a.out "testing1 testing2"Progranm name ./a.outThe argument supplied is testing1 testing2

 C 未定义行为(Undefined behavior)

C 排序算法 

2 篇笔记 写笔记

  1.    Blithe

      cn1***0441251@126.com

    214

    main 的两个参数的参数名如下:

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

    并不一定这样写,只是约定俗成罢了。但是亦可以写成下面这样:

    int main( int test_argc, char *test_argv[] )

    任意你喜欢的名字。

    但是大部分人还是写成开头那样的,如下:

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

    Blithe

       Blithe

      cn1***0441251@126.com

    5年前 (2019-01-24)

  2.    JustSong

      son***nderful@qq.com

       参考地址

    142

    Linux 下我们可使用 getopt 和 getopt_long 来对命令行参数进行解析,例如:

    int main(int argc, char *argv[]){
        char *optstr = "p:n:m:c:";
        struct option opts[] = {
            {"path", 1, NULL, 'p'},
            {"name", 1, NULL, 'n'},
            {"mtime", 1, NULL, 'm'},
            {"ctime", 1, NULL, 'c'},
            {0, 0, 0, 0},
        };
        int opt;
        while((opt = getopt_long(argc, argv, optstr, opts, NULL)) != -1){
            switch(opt) {
                case 'p':
                    strcpy(path, optarg);
                    break;
                case 'n':
                    strcpy(targetname, optarg);
                    break;
                case 'm':
                    modifiedtime = atoi(optarg);
                    break;
                case 'c':
                    changetime = atoi(optarg);
                    break;
                case '?':
                    if(strchr(optstr, optopt) == NULL){
                        fprintf(stderr, "unknown option '-%c'\n", optopt);
                    }else{
                        fprintf(stderr, "option requires an argument '-%c'\n", optopt);
                    }
                    return 1;
            }
        }
        findInDir(path);
        return 0;}

    JustSong

       JustSong

      son***nderful@qq.com

       参考地址

    5年前 (2019-11-20)


|发布人 : 1 发布时间: 1970-01-01 08:33
|留言发给站长
Column 1 Column 2 Column 3
R1C1 R1C2 R1C3
Item Item Item
























---------------









右边分栏
dfasdfa
Flex item 2
Flex item 3














0.031286s