Analizowanie argumentów wiersza polecenia języka C
Specyficzne dla firmy Microsoft
Interpretując argumenty podane w wierszu polecenia systemu operacyjnego, kod uruchamiający Microsoft C używa następujących reguł:
Argumenty są rozdzielone białym znakiem, który może być albo spacją albo tabulatorem.
Ciąg znaków ujęty w podwójny cudzysłów jest interpretowany jako pojedynczy argument, niezależnie od zawartych w nim białych znaków.Ciąg w cudzysłowie może być osadzony w argumencie.Należy zauważyć, że daszek (^) nie jest rozpoznawany, jako znak anulowania lub ogranicznika.
Podwójny cudzysłów poprzedzony przez ukośnik odwrotny \", jest interpretowany, jako literał podwójnego znaku cudzysłowu (").
Ukośniki odwrotne są interpretowane dosłownie, chyba że bezpośrednio poprzedzają podwójny znak cudzysłowu.
Jeśli po parzystej liczbie odwrotnych ukośników następuje podwójny znak cudzysłowu, to w tablicy argv zostanie umieszczony jeden znak odwrotnego ukośnika (\) dla każdej pary odwrotnych ukośników (\\) a podwójny znak cudzysłowu (") traktowany będzie, jako ogranicznik ciągu.
Jeśli po nieparzystej liczbie odwrotnych ukośników, następuje podwójny cudzysłów, to w tablicy argv zostanie umieszczony jeden znak odwróconego ukośnika (\) dla każdej pary odwróconych ukośników (\\) a podwójny cudzysłów jest interpretowany, jako sekwencja ucieczki, powodując umieszczenie literału podwójnego cudzysłowu (") w argv.
Ta lista ilustruje powyższe reguły, pokazując interpretowany wynik, przekazany do argv dla kilku przykładów argumentów wiersza polecenia.Dane wyjściowe wymienione w drugiej, trzeciej, i czwartej kolumnie są z programu ARGS.C znajdującego się na liście.
Wejście wiersza polecenia |
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 |
Przykład
Kod
// 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;
}
Komentarze
Jednym z przykładów wyjścia z tego programu jest:
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
KONIEC informacji specyficznych dla firmy Microsoft