Sdílet prostřednictvím


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ýstupu argv[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 (\) do argv 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 (") do argv.

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é

main provádění funkcí a programů