Napisałem kod, który musi wyświetlać główne parametry, ale kiedy go skompilowałem i wpisałem „*” program pokazuje moją strukturę plików. Polecenie w cmd wygląda następująco: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;
}
Wynik to:
program
1
2
3
program.c
program.exe
10-03-20
11-02-20
I moje pytanie: Czy można zmusić program do drukowania „*” zamiast wyświetlania plików na liście. Dziękuję za radę
c
parameters
mingw
main
wildcard-expansion
stasio14
źródło
źródło
*
Dostaje interpretowane przez powłokę, a nie sam program. Użyj\*
lub,"*"
aby przekazać * do programu.*
jest konwertowany"file1 file2 ..."
przez powłokę. Nie ma nic złego w twoim programie C (chociaż dołączenie<stdlib.h>
nie jest konieczne). Aby zapobiec konwersji gwiazdy przez powłokę, użyj cudzysłowów:program.exe 1 2 3 "*"
char const* argv[]
nie jest poprawne. Nie możesz sam wymyślać form main (), może to zrobić tylko kompilator.argv
to tak naprawdę pamięć do odczytu / zapisu, nawet jeśli zapisywanie w niej często nie jest najlepszym pomysłem.Odpowiedzi:
mingw powoduje, że program wykonuje rozszerzenie symboli wieloznacznych. Dodaj następujące elementy do swojego programu, aby wyłączyć to zachowanie:
W świecie uniksowym oczekuje się, że powłoka wykona ekspansję symboli wieloznacznych.
W świecie Windows rozszerzenie symboli wieloznacznych jest pozostawione aplikacji.
To sprawia, że pisanie programów przenośnych jest trudne. Ponieważ mingw jest często używany do kompilacji programów, które nie zostały napisane z myślą o systemie Windows, biblioteka środowiska wykonawczego C automatycznie rozszerza parametry za pomocą symboli wieloznacznych.
a.c
:Ale mingw zapewnia wyjście. Dodanie do programu następujących elementów wyłącza to zachowanie:
a.c
:źródło