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'outputargv[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 (
\
) nellaargv
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 (
\
) nellaargv
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 ("
) inargv
.
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