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 buď mezery, nebo tabulátory.
První argument (
argv[0]
) se zpracovává speciálně. Představuje název programu. Vzhledem k tomu, že se musí jednat o platný název cesty, jsou části obklopené uvozovkami ("
) povoleny. Ve výstupuargv[0]
nejsou zahrnuté dvojité uvozovky. Části ohraničené dvojitými uvozovkami zabraňují interpretaci mezery nebo znaku tabulátoru jako konce argumentu. Pozdější pravidla v tomto seznamu neplatí.Řetězec obklopený dvojitými uvozovkami je interpretován jako jeden argument bez ohledu na to, jestli obsahuje prázdné znaky nebo ne. Řetězec v uvozovátku lze vložit do argumentu. Stříšku (
^
) nelze rozpoznat jako řídicí znak nebo oddělovač. V řetězci v uvozovkách je dvojice dvojitých uvozovek interpretována jako jednoduchá dvojitá uvozovka. Pokud příkazový řádek končí před nalezením uvozovek, všechny dosud přečtené znaky budou výstupem posledního argumentu.Dvojitá uvozovka, které předchází zpětné lomítko (
\"
), se interpretuje jako doslovná dvojitá uvozovka ("
).Zpětná lomítka jsou interpretována doslovně, pokud bezprostředně nejdou před dvojitou uvozovkou.
Pokud je sudý počet zpětných lomítek následovaný dvojitou uvozovkou, umístí se jedno zpětné lomítko (
\
) doargv
pole pro každou dvojici zpětných lomítek (\\
) a dvojitá uvozovka ("
) se interpretuje jako oddělovač řetězců.Pokud za lichým počtem zpětných lomítek následuje dvojitá uvozovka, umístí se do
argv
pole pro každý pár zpětných lomítek () jedno zpětné lomítko ().\
\\
Dvojitá uvozovka je interpretována jako řídicí sekvence zbývajícím zpětným lomítkem, což způsobí umístění literálové dvojité 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 – Specifické pro Microsoft
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro