Udostępnij za pośrednictwem


Analizowanie argumentów wiersza polecenia języka C

Specyficzne dla firmy Microsoft

Kod uruchamiania języka 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ę spacji lub znaku 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 białych znaków, czy nie. Ciąg cytowany można osadzić w argumencie. Daszek (^) nie jest rozpoznawany jako znak ucieczki lub ogranicznik. W ciągu cudzysłowu para podwójnych znaków cudzysłowu jest interpretowana jako pojedynczy znak podwójnego cudzysłowu. Jeśli wiersz polecenia kończy się przed odnalezieniem zamykającego podwójnego cudzysłowu, wszystkie znaki odczytywane do tej pory są danymi wyjściowymi jako ostatni argument.

  • Znak podwójnego cudzysłowu poprzedzony ukośnikiem odwrotnym (\") jest interpretowany jako znak podwójnego cudzysłowu (").

  • 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, powodując umieszczenie literału podwójnego cudzysłowu (") w argvobiekcie .

Ta lista ilustruje powyższe reguły, pokazując interpretowany wynik przekazany do argv kilku przykładów argumentów wiersza polecenia. Dane wyjściowe wymienione w drugiej, trzeciej i czwartej kolumnie pochodzą z usługi ARGS. Program 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