C 命令列引數

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