Delen via


C-opdrachtregelargumenten parseren

Microsoft-specifieke

De opstartcode van Microsoft C gebruikt de volgende regels bij het interpreteren van argumenten die zijn opgegeven op de opdrachtregel van het besturingssysteem:

  • Argumenten worden gescheiden door spaties, ofwel spaties of tabs.

  • Het eerste argument (argv[0]) wordt speciaal behandeld. Deze vertegenwoordigt de naam van het programma. Omdat het een geldige padnaam moet zijn, zijn onderdelen tussen dubbele aanhalingstekens (") toegestaan. De dubbele aanhalingstekens worden niet opgenomen in de argv[0] uitvoer. De delen tussen dubbele aanhalingstekens verhinderen de interpretatie van een spatie of tabteken als het einde van het argument. De latere regels in deze lijst zijn niet van toepassing.

  • Een tekenreeks tussen dubbele aanhalingstekens wordt geïnterpreteerd als één argument, ongeacht of deze witruimtetekens bevat of niet. Een tekenreeks tussen aanhalingstekens kan worden ingesloten in een argument. De caret (^) wordt niet herkend als een escape-teken of scheidingsteken. Binnen een aanhalingstekenreeks wordt een paar dubbele aanhalingstekens geïnterpreteerd als één dubbel aanhalingsteken. Als de opdrachtregel eindigt voordat een dubbele aanhalingsteken sluiten wordt gevonden, worden alle tekens die tot nu toe worden gelezen, uitgevoerd als het laatste argument.

  • Een dubbele aanhalingsteken voorafgegaan door een backslash (\") wordt geïnterpreteerd als een letterlijk dubbel aanhalingsteken (").

  • Backslashes worden letterlijk geïnterpreteerd, tenzij ze direct voorafgaan aan een dubbel aanhalingsteken.

  • Als een even aantal backslashes wordt gevolgd door een dubbele aanhalingsteken, wordt één backslash (\) in de argv matrix geplaatst voor elk paar backslashes () en wordt het dubbele aanhalingsteken (\\") geïnterpreteerd als een tekenreeksscheidingsteken.

  • Als een oneven aantal backslashes wordt gevolgd door een dubbele aanhalingsteken, wordt er één backslash (\) in de argv matrix geplaatst voor elk paar backslashes (\\). Het dubbele aanhalingsteken wordt geïnterpreteerd als een escape-reeks door de resterende backslash, waardoor een letterlijk dubbel aanhalingsteken (") wordt geplaatst argv.

Deze lijst illustreert de bovenstaande regels door het geïnterpreteerde resultaat weer te geven dat is doorgegeven voor argv verschillende voorbeelden van opdrachtregelargumenten. De uitvoer die wordt vermeld in de tweede, derde en vierde kolom is afkomstig van de ARGS. C-programma dat de lijst volgt.

Opdrachtregelinvoer 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

Voorbeeld

Code

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

Een voorbeeld van uitvoer van dit programma is:

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

Microsoft-specifieke beëindigen

Zie ook

main uitvoering van functies en programma's