Analyse des arguments de ligne de commande C
Section spécifique à Microsoft
Le code de démarrage Microsoft C utilise les règles suivantes lors de l’interprétation des arguments spécifiés dans la ligne de commande du système d’exploitation :
Les arguments sont délimités par des espaces blancs (espaces ou tabulations).
Le premier argument (
argv[0]
) est traité de manière spéciale. Il représente le nom du programme. Comme il doit s’agir d’un nom de chemin d’accès valide, les parties entourées de guillemets doubles ("
) sont autorisées. Les guillemets doubles ne sont pas inclus dans la sortieargv[0]
. Les parties entourées de guillemets doubles empêchent l’interprétation d’une espace ou d’une tabulation comme la fin de l’argument. Les règles suivantes répertoriées dans cette liste ne s’appliquent pas.Une chaîne entourée de guillemets doubles est interprétée comme un argument unique, qu’elle contienne ou non des espaces blancs. Une chaîne entre guillemets peut être incorporée dans un argument. L’accent circonflexe (
^
) n’est pas reconnu comme un caractère d’échappement ou un délimiteur. Dans une chaîne entre guillemets, une paire de guillemets doubles est interprétée comme un seul guillemet double échappé. Si la ligne de commande se termine avant qu’un guillemet double fermant soit trouvé, tous les caractères lus jusque là constituent le dernier argument.Un guillemet double précédé d’une barre oblique inverse (
\"
) est interprété comme un guillemet double littéral ("
).Les barres obliques inverses sont interprétées littéralement, sauf si elles précèdent immédiatement un guillemet double.
Si un nombre pair de barres obliques inverses est suivi d’un guillemet double, une barre oblique inverse (
\
) est placée dans le tableauargv
pour chaque paire de barres obliques inverses (\\
) et le guillemet double ("
) est interprété comme un délimiteur de chaîne.Si un nombre impair de barres obliques inverses est suivi d’un guillemet double, une barre oblique inverse (
\
) est placée dans le tableauargv
pour chaque paire de barres obliques inverses (\\
). Le guillemet double est interprété comme une séquence d’échappement par la barre oblique inverse restante, ce qui entraîne le placement d’un guillemet double littéral ("
) dansargv
.
Cette liste illustre les règles énoncées ci-dessus en indiquant le résultat interprété passé à argv
pour plusieurs exemples d'arguments de ligne de commande. La sortie indiquée dans les deuxième, troisième et quatrième colonnes provient du programme ARGS.C qui suit la liste.
Entrée de ligne de commande | 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 |
Exemple
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;
}
Voici un exemple de sortie de ce programme :
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
FIN de la section spécifique à Microsoft