剖析命令列引數 c
Microsoft 專有的
Microsoft c 啟始程式碼會在解譯作業系統命令列上指定的引數時使用下列規則:
引數會以空白或定位鍵的泛空白字元 (White Space) 進行分隔。
由雙引號包夾的字串會解譯為單一引數,不論內含泛空白字元。 有引號的字串可以內嵌到引數中。 請注意,插入號 (^) 沒有被辨認為逸出字元或分隔符號。
雙引號加上反斜線, \",會被解譯為常值雙引號 (')。
反斜線會逐字解譯,除非後面緊接著雙引號。
如果偶數數目的反斜線後面雙引號,則一條反斜線 (\) 放在argv陣列,每一對反斜線 (\),和雙引號 (') 會被解譯為字串分隔符號。
如果奇數數目的反斜線後面雙引號,則一條反斜線 (\) 放在argv一對反斜線的陣列 (\) 和雙引號,會由剩下的反斜線,導致常值雙引號解譯為逸出序列 ('),放在argv。
這份清單說明上述規則顯示解譯的結果傳遞至argv的命令列引數的數個範例。 輸出列在第二、 三和第四個資料行是從引數。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 |
範例
程式碼
// Parsing_C_Commandline_args.c
// 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\TEST.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
結束 Microsoft 特定