Compartilhar via


Analisando argumentos de linha de comando C

Seção específica da Microsoft

O código de inicialização do Microsoft C usa as seguintes regras para interpretar os argumentos dados na linha de comando do sistema operacional:

  • Os argumentos são delimitados por caracteres de espaço em branco, que são espaços ou tabulações.

  • O primeiro argumento (argv[0]) é tratado de maneira especial. Ele representa o nome do programa. Como deve ser um nome de caminho válido, as partes cercadas por aspas duplas (") são permitidas. As aspas duplas não são incluídas na saída de argv[0]. As partes cercadas por aspas duplas impedem a interpretação de um caractere de espaço ou tabulação como o final do argumento. As regras posteriores nesta lista não se aplicam.

  • Uma cadeia de caracteres cercada por aspas duplas é interpretada como um argumento único, independentemente de conter caracteres de espaço em branco ou não. Uma cadeia de caracteres entre aspas pode ser inserida em um argumento. O acento circunflexo (^) não é reconhecido como um caractere de escape ou um delimitador. Dentro de uma cadeia de caracteres entre aspas, um par de aspas duplas é interpretado como um único sinal de aspas duplas escapado. Se a linha de comando terminar antes que um caractere de aspas duplas de fechamento seja localizado, todos os caracteres lidos até então serão emitidos como o último argumento.

  • Aspas duplas precedidas por uma barra invertida (\") são interpretadas como um caractere literal de aspas duplas (").

  • As barras invertidas são interpretadas literalmente, a menos que precedam imediatamente as aspas duplas.

  • Se um número par de barras invertidas for seguido por aspas duplas, uma barra invertida (\) será colocada na matriz argv para cada par de barras invertidas (\\), e as aspas duplas (") serão interpretadas como um delimitador de cadeia de caracteres.

  • Se um número ímpar de barras invertidas for seguido por aspas duplas, então uma barra invertida (\) será colocada na matriz argv para cada par de barras invertidas (\\). As aspas duplas são interpretadas como uma sequência de escape pela barra invertida restante, fazendo com que aspas duplas literais (") sejam colocadas em argv.

Esta lista ilustra as regras acima mostrando o resultado interpretado passado para argv por vários exemplos de argumentos de linha de comando. O resultado listado na segunda, terceira e quarta coluna são do programa de ARGS.C que segue a lista.

Entrada de linha de 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

Exemplo

Código

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

Um exemplo de resultado deste programa é:

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

Fim da seção específica da Microsoft

Confira também

main função e execução do programa