C语言 命令行参数



  • 命令行参数

    执行时,可以将某些值从命令行传递到C程序。这些值称为命令行参数,在许多情况下它们对于您的程序很重要,尤其是当您要从外部控制程序而不是在代码内部硬编码这些值时。命令行参数使用main()函数参数进行处理,其中argc表示传递的参数数量,而argv[]是指向传递给程序的每个参数的指针数组。以下是一个简单的示例,该示例检查命令行是否提供了任何参数并采取相应的措施-
    
    char name[100];
    
    
    但是,现在让我们考虑一种情况,您对所需存储的文本长度一无所知,例如,您想要存储有关主题的详细说明。在这里,我们需要定义一个指向字符的指针,而无需定义需要多少内存,稍后,根据需求,我们可以分配内存,如下例所示:
    
    #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 testing
    The argument supplied is testing
    
    
    当使用两个参数编译并执行以上代码时,将产生以下结果。
    
    $./a.out testing1 testing2
    Too many arguments supplied.
    
    
    在不传递任何参数的情况下编译并执行上述代码时,将产生以下结果。
    
    $./a.out
    One 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.out
    The argument supplied is testing1 testing2