共用方式為


剖析 C 命令列引數

Microsoft 特定的

Microsoft C 啟動程式碼在解譯作業系統命令列所指定的引數時會使用下列規則:

  • 自變數會以空格符分隔,這些字元為空格或製表元。

  • 第一個引數 (argv[0]) 是特別處理。 這代表程式名稱。 因為這必須是有效的路徑名稱,所以允許以雙引號 (") 括住的部分。 argv[0] 輸出中未包含雙引號標記。 以雙引弧括住的部分可防止將空格或定位字元解譯為引數的結尾。 此清單中的後續規則不適用。

  • 以雙引弧括住的字串會解譯為單一自變數,不論它是否包含空格符。 有引號的字串可以內嵌到引數中。 插入號 (^) 不會被辨識為逸出字元或分隔符號。 在引號字串中,一對雙引號會解譯為單一逸出雙引號標記。 如果命令行在找到結尾雙引號之前結束,則到目前為止讀取的所有字元都會輸出為最後一個引數。

  • 前面有反斜線 (\") 的雙引號會解譯為常值雙引號 (")。

  • 反斜線會逐字解譯,除非後面緊接著雙引號。

  • 如果雙引號前面有偶數數目的反斜線,則會將每一對反斜線 (\\) 的其中一個反斜線 (\) 放到 argv 陣列中,並將雙引號 (") 解譯為字串分隔符號。

  • 如果雙引號前面有奇數數目的反斜線,則會將每一對反斜線 (\\) 的的其中一個反斜線 (\) 放在 argv 陣列中。 雙引號被其餘反斜線解譯為逸出序列,導致常值雙引號 (") 置於 argv 中。

這個清單示範數個命令列引數範例傳遞至 argv 的解譯結果,以說明上述規則。 第二、三和四欄所列的輸出取自清單之後的 ARGS.C 程式。

命令列輸入 argv[1] argv[2] argv[3]
"a b c" d e a b c d e
"ab\"c" "\\" d ab"c \ d
a\\\b d"e f"g h a\\\b de fg h
a\\\"b c d a\"b c d
a\\\\"b c" d e a\\b c d e
a"b"" c d ab" c d

範例

程式碼

// ARGS.C illustrates the following variables used for accessing
// command-line arguments and environment variables:
// argc  argv  envp
//

#include <stdio.h>

int main( int argc, // Number of strings in array argv
char *argv[],      // Array of command-line argument strings
char **envp )      // Array of environment variable strings
{
    int count;

    // Display each command-line argument.
    printf_s( "\nCommand-line arguments:\n" );
    for( count = 0; count < argc; count++ )
        printf_s( "  argv[%d]   %s\n", count, argv[count] );

    // Display each environment variable.
    printf_s( "\nEnvironment variables:\n" );
    while( *envp != NULL )
        printf_s( "  %s\n", *(envp++) );

    return;
}

此程式輸出的其中一個範例是:

Command-line arguments:
  argv[0]   C:\MSC\ARGS.EXE

Environment variables:
  COMSPEC=C:\NT\SYSTEM32\CMD.EXE
  PATH=c:\nt;c:\binb;c:\binr;c:\nt\system32;c:\word;c:\help;c:\msc;c:\;
  PROMPT=[$p]
  TEMP=c:\tmp
  TMP=c:\tmp
  EDITORS=c:\binr
  WINDIR=c:\nt

END Microsoft 特定的

另請參閱

main 函式和程序執行