Eu escrevi um código que precisa exibir os parâmetros principais, mas quando o compilei e digitei "*" o programa mostra minha estrutura de arquivos. O comando no cmd se parece com o seguinte:program.exe 1 2 3 *
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const* argv[]) {
for (int i=0; i<argc; i++) printf("%s\n", argv[i]);
return 0;
}
O resultado é:
program
1
2
3
program.c
program.exe
10-03-20
11-02-20
E minha pergunta: é possível forçar o programa a imprimir "*" em vez de listar arquivos. Obrigado no conselho
c
parameters
mingw
main
wildcard-expansion
stasio14
fonte
fonte
*
é interpretado pelo shell, não pelo próprio programa. Use\*
ou"*"
para passar o * para o programa.*
é convertido"file1 file2 ..."
pelo seu shell. Não há nada errado com o seu programa C (embora a inclusão<stdlib.h>
não seja necessária). Para impedir que o shell converta a estrela, use aspas:program.exe 1 2 3 "*"
char const* argv[]
não está correto. Você não pode inventar formas de main () sozinho, apenas o compilador pode fazer isso.argv
é, na verdade, memória de leitura / gravação, mesmo que a gravação não seja a melhor idéia.Respostas:
mingw faz com que o programa execute expansão curinga dos parâmetros. Adicione o seguinte ao seu programa para desativar esse comportamento:
No mundo unix, espera-se que o shell execute expansão de curinga.
No mundo do Windows, a expansão de curinga é deixada para o aplicativo.
Isso torna complicado escrever programas portáteis. Como o mingw é frequentemente usado para compilar programas que não foram escritos com o Windows em mente, sua biblioteca de tempo de execução C executa automaticamente a expansão de caracteres curinga dos parâmetros.
a.c
:Mas, mingw fornece uma saída. Adicionar o seguinte ao seu programa desabilita esse comportamento:
a.c
:fonte