Partilhar via


Analisando argumentos de linha de comando C

Específico da Microsoft

O código de inicialização do Microsoft C usa as seguintes regras ao interpretar argumentos fornecidos 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 forma especial. Ele representa o nome do programa. Como deve ser um nome de caminho válido, partes cercadas por aspas duplas (") são permitidas. As aspas duplas não estão incluídas na argv[0] saída. 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 desta lista não se aplicam.

  • Uma cadeia de caracteres cercada por aspas duplas é interpretada como um único argumento, quer contenha caracteres de espaço em branco ou não. Uma cadeia de caracteres entre aspas pode ser incorporada em um argumento. O cursor (^) não é reconhecido como um caractere de fuga ou delimitador. Dentro de uma cadeia de aspas, um par de aspas duplas é interpretado como uma única aspa dupla com escape. Se a linha de comando terminar antes que uma aspa dupla de fechamento seja encontrada, todos os caracteres lidos até agora serão exibidos como o último argumento.

  • Uma aspa dupla precedida por uma barra invertida (\") é interpretada como uma aspa dupla literal (").

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

  • Se um número par de barras invertidas for seguido por aspas duplas, então uma barra invertida (\) será colocada na argv matriz 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 argv matriz 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 uma aspa dupla literal (") seja colocada em argv.

Esta lista ilustra as regras acima, mostrando o resultado interpretado passado para argv vários exemplos de argumentos de linha de comando. A saída listada na segunda, terceira e quarta colunas é do ARGS. C programa 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 saída 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

END Específico da Microsoft

Ver também

main Execução de funções e programas