Udostępnij za pośrednictwem


Analizowanie argumentów wiersza polecenia języka C

Specyficzne dla firmy Microsoft

Kod startowy microsoft C używa następujących reguł podczas interpretowania argumentów podanych w wierszu polecenia systemu operacyjnego:

  • Argumenty są rozdzielane znakami odstępów, które są spacjami lub tabulatorami.

  • Pierwszy argument (argv[0]) jest traktowany specjalnie. Reprezentuje nazwę programu. Ponieważ musi być prawidłową nazwą ścieżki, części otoczone podwójnymi cudzysłowami (") są dozwolone. Znaki podwójnego cudzysłowu nie są uwzględniane w danych wyjściowych argv[0] . Części otoczone podwójnym cudzysłowem uniemożliwiają interpretację znaku spacji lub tabulatora jako końca argumentu. Późniejsze reguły na tej liście nie mają zastosowania.

  • Ciąg otoczony podwójnym cudzysłowem jest interpretowany jako pojedynczy argument, niezależnie od tego, czy zawiera znaki odstępu, czy nie. Ciąg cudzysłów można osadzić w argumencie. Daszek (^) nie jest rozpoznawany jako znak ucieczki lub ogranicznik. W cudzysłowie parą podwójnych znaków cudzysłowu jest interpretowana jako pojedynczy znak cudzysłowu z znakiem ucieczki. Jeśli wiersz polecenia kończy się przed odnalezieniem zamykającego podwójnego cudzysłowu, wszystkie znaki odczytane do tej pory są danymi wyjściowymi jako ostatni argument.

  • Podwójny cudzysłów poprzedzony ukośnikiem odwrotnym (\") jest interpretowany jako znak podwójnego cudzysłowu literału (").

  • Ukośniki odwrotne są interpretowane dosłownie, chyba że bezpośrednio poprzedzają znak podwójnego cudzysłowu.

  • Jeśli po znaku podwójnego cudzysłowu następuje parzysta liczba ukośników odwrotnych (), jeden ukośnik odwrotny (\) jest umieszczany w argv tablicy dla każdej pary ukośników odwrotnych (\\), a znak podwójnego cudzysłowu (") jest interpretowany jako ogranicznik ciągu.

  • Jeśli po znaku podwójnego cudzysłowu następuje nieparzysta liczba ukośników odwrotnych (), jeden ukośnik odwrotny (\) zostanie umieszczony w argv tablicy dla każdej pary ukośników odwrotnych (\\). Znak podwójnego cudzysłowu jest interpretowany jako sekwencja ucieczki przez pozostały ukośnik odwrotny, co powoduje umieszczenie literału podwójnego cudzysłowu (") w obiekcie argv.

Ta lista ilustruje powyższe reguły, pokazując wynik interpretowany przekazany do argv dla kilku przykładów argumentów wiersza polecenia. Dane wyjściowe wymienione w drugiej, trzeciej i czwartej kolumnie pochodzą z usługi ARGS. Program języka C, który jest zgodny z listą.

Dane wejściowe 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
a"b"" c d ab" c d

Przykład

Kod

// 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;
}

Jednym z przykładów danych wyjściowych z tego programu jest:

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

Zobacz też

main wykonywanie funkcji i programu