分享方式:


剖析 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 函式和程式執行