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 deargv[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 matrizargv
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 matrizargv
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 emargv
.
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