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 sortie argv[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 tableau argv 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 tableau argv 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 (") dans argv.

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

Voir aussi

Fonction main et exécution du programme