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 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