Analýza argumentů příkazového řádku jazyka C
Specifické pro Microsoft
Spouštěcí kód Microsoft C používá při interpretaci argumentů z příkazového řádku operačního systému následující pravidla:
Argumenty jsou oddělené prázdnými znaky, což jsou mezery nebo tabulátory.
První argument (
argv[0]
) se zpracovává speciálně. Představuje název programu. Protože musí být platným názvem cesty, jsou části obklopené dvojitými uvozovkami ("
) povoleny. Do výstupuargv[0]
nejsou zahrnuty dvojité uvozovky. Části obklopené dvojitými uvozovkami brání interpretaci znaku mezery nebo tabulátoru jako konce argumentu. Pozdější pravidla v tomto seznamu se nevztahují.Řetězec obklopený dvojitými uvozovkami je interpretován jako jediný argument, ať už obsahuje prázdné znaky, nebo ne. Do argumentu lze vložit řetězec s uvozovými znaky. Stříšku (
^
) se nerozpozná jako řídicí znak nebo oddělovač. V uvozovkách se dvojice dvojitých uvozovek interpretuje jako jednoduchá uvozovka s jednoduchým uvozovkou. Pokud příkazový řádek končí před nalezením uzavírací dvojité uvozovky, všechny znaky přečtené zatím jsou výstupem jako poslední argument.Dvojitá uvozovka před lomítkem (
\"
) se interpretuje jako literálová uvozovka ("
).Zpětné lomítka se interpretují doslova, pokud bezprostředně před dvojitou uvozovkou nejdou.
Pokud za dvojitou uvozovkou následuje sudý počet zpětných lomítek, pak se jedno zpětné lomítko (
\
) umístí doargv
pole pro každou dvojici zpětných lomítek (\\
) a dvojitá uvozovka ("
) se interpretuje jako oddělovač řetězců.Pokud je lichý počet zpětných lomítek následovaný dvojitou uvozovkou, je jedno zpětné lomítko (
\
) umístěné vargv
poli pro každou dvojici zpětných lomítek (\\
). Dvojitá uvozovka se interpretuje jako řídicí sekvence zbývajícím zpětným lomítkem, což způsobí umístění literálové uvozovky ("
) doargv
.
Tento seznam ukazuje výše uvedená pravidla zobrazením interpretovaného výsledku předaného do argv
pro několik příkladů argumentů příkazového řádku. Výstup uvedený v druhém, třetím a čtvrtém sloupci je z aplikace ARGS.C, která následuje seznam.
Vstup příkazového řádku | 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 |
Příklad
Kó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;
}
Jeden příklad výstupu z této aplikace je:
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 Specific