Pular para o conteúdo

Pegar 'espaço' na linha de comando [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Pegar 'espaço' na linha de comando [RESOLVIDO]

Enviado em 03/12/2015 - 23:01h

Como eu passo uma string pro meu programa pela linha de comando de forma que ela inclua o caractere espaço? Tentei usar aspas na string mas só lê os caracteres até o espaço e ignora o resto.

Responder tópico

2. Re: Pegar 'espaço' na linha de comando

Enviado em 04/12/2015 - 02:35h

Linha de comando do shell? Se for, isso é resolvido no nível do próprio shell, em resposta ao uso que você fizer das aspas ou apóstrofos.

Uma quantidade qualquer de espaços ou tabulações que não estejam entre aspas ou apóstrofos nem escapados com uma barra invertida (“\”) conta como um único separador de argumentos (ou como nada, se vierem antes da primeira palavra da linha ou depois da última). Já os espaços escapados com \ ou cercados por aspas ou apóstrofos são reconhecidos como parte da palavra que constitui um nome de comando ou argumento.

Veja: se você digitar a seguinte linha de comando

meu_programa "Este argumento  contém   espaços" a     \   b\ c 'Este contém uma (	) tabulação' 
o shell eventualmente vai executar algo com efeito semelhante a

char **argv;
argv=malloc(7*sizeof(*argv)); // Porque a linha de comando tem 6 partes
argv[0]="meu_programa";
argv[1]="Este argumento contém espaços"; // 1, 2 e 3 espaços, respectivamente, como na linha de comando
argv[2]="a";
argv[3]=" ";
argv[4]="b c";
argv[5]="Este contém uma (\t) tabulação";
argv[6]=NULL;
execvp("meu_programa", argv);
e isso vai fazer com que o seu programa receba valores correspondentes nos argumentos argc e argv da função main(), fazendo a assertiva abaixo verdadeira.

assert(
argc==6 &&
strcmp(argv[0], "meu_programa")==0 &&
strcmp(argv[1], "Este argumento contém espaços")==0 &&
strcmp(argv[2], "a")==0 &&
strcmp(argv[3], " ")==0 &&
strcmp(argv[4], "b c")==0 &&
strcmp(argv[5], "Este contém uma (\t) tabulação")==0 &&
argv[6]==NULL
);
NOTA: Para conseguir produzir o caráter de tabulação da linha de comando do bash (e eventualmente outros shells interativos), você provavelmente terá de usar Control-V antes de apertar a tecla Tab. O Control-V faz com que o próximo caráter recebido seja tomado literalmente, eventualmente perdendo sua função de caráter de controle.

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder