C - 命令行参数

执行时,可以将一些值从命令行传递给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 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