Analisi di argomenti della riga di comando C++

Sezione specifica Microsoft

Il codice di avvio C di Microsoft utilizza le regole seguenti quando interpreta gli argomenti forniti alla riga di comando del sistema operativo.

  • Gli argomenti sono delimitati da spazi vuoti, ovvero spazi o schede.

  • Il primo argomento (argv[0]) viene trattato in modo speciale. Rappresenta il nome del programma. Poiché deve essere un percorso valido, sono consentite parti racchiuse tra virgolette doppie ("). Le virgolette doppie non sono incluse nell'output argv[0] . Le parti racchiuse tra virgolette doppie impediscono l'interpretazione di uno spazio o di un carattere di tabulazione come fine dell'argomento. Le regole successive in questo elenco non si applicano.

  • Una stringa racchiusa tra virgolette doppie viene interpretata come un singolo argomento, indipendentemente dal fatto che contenga o meno spazi vuoti. Una stringa tra virgolette può essere incorporata in un argomento. Il cursore (^) non viene riconosciuto come carattere di escape o delimitatore. All'interno di una stringa tra virgolette, una coppia di virgolette doppie viene interpretata come un'unica virgoletta doppia preceduta da un carattere di escape. Se la riga di comando termina prima che venga trovato un segno di virgolette doppie di chiusura, tutti i caratteri letti finora vengono restituiti come ultimo argomento.

  • Una virgoletta doppia preceduta da una barra rovesciata (\") viene interpretata come un segno di virgolette doppie letterale (").

  • Le barre rovesciate vengono interpretate letteralmente, a meno che non precedono immediatamente un segno di virgolette doppie.

  • Se un numero pari di barre rovesciate è seguito da un segno di virgolette doppie, viene inserita una barra rovesciata (\) nella argv matrice per ogni coppia di barre rovesciate (\\) e il segno tra virgolette doppie (") viene interpretato come delimitatore di stringa.

  • Se un numero dispari di barre rovesciata è seguito da un segno di virgolette doppie, viene inserita una barra rovesciata (\) nella argv matrice per ogni coppia di barre rovesciata (\\). Il segno di virgolette doppie viene interpretato come sequenza di escape dalla barra rovesciata rimanente, causando l'inserimento di un segno di virgolette doppie letterale (") in argv.

In questo elenco vengono illustrate le regole precedenti per visualizzare il risultato interpretato come passato a argv per alcuni esempi di argomenti della riga di comando. L'output elencato nella seconda, terza e quarta colonna viene dal programma ARGS.C che segue l'elenco.

Input della riga di comando 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

Esempio

Codice

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

Un esempio di output del programma è:

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

Fine sezione specifica Microsoft

Vedi anche

main esecuzione di funzioni e programmi