Analisando argumentos de linha de comando c
Específicos do Microsoft
O código de inicialização do Microsoft C usa as seguintes regras ao interpretar os argumentos fornecidos na linha de comando do sistema operacional:
Argumentos são delimitados por espaço em branco, o que é um espaço ou uma guia.
Uma seqüência de caracteres entre aspas duplas é interpretada como um argumento único, independentemente do contido em espaços em branco.Uma seqüência entre aspas pode ser incorporada em um argumento.Observe que o cursor (^) não é reconhecido como um caractere de escape ou delimitador.
Aspas duplas precedido por uma barra invertida, \ ", é interpretado como um literal aspas duplas (").
Barras invertidas são interpretadas literalmente, a menos que eles precedem aspas duplas.
Se um número par de barras invertidas é seguido por aspas duplas, em seguida, um de barra invertida (\) é colocado na argv matriz para cada par de barras invertidas (\) e aspas duplas (") é interpretado como um delimitador de seqüência de caracteres.
Se um número ímpar de barras invertidas é seguido por aspas duplas, em seguida, um de barra invertida (\) é colocado na argv matriz para cada par de barras invertidas (\) e aspas duplas é interpretada como uma seqüência de escape por barra invertida restante, causando um literal aspas duplas (") sejam colocados em argv.
Esta lista ilustra as regras acima, mostrando o resultado interpretado passado para argv para vários exemplos de argumentos de linha de comando.A saída é listado na segunda, terceira e quarta colunas provém os ARGS.Programa em 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 |
Exemplo
Código
// Parsing_C_Commandline_args.c
// 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;
}
Comentários
Um exemplo de saída a partir desse programa é:
Command-line arguments:
argv[0] C:\MSC\TEST.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
Específicos do Microsoft final