Ich habe einen Code geschrieben, der die Hauptparameter anzeigen muss, aber wenn ich ihn kompiliert und in das Programm "*" eingegeben habe, wird meine Dateistruktur angezeigt. Der Befehl in cmd sieht folgendermaßen aus: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;
}
Das Ergebnis ist:
program
1
2
3
program.c
program.exe
10-03-20
11-02-20
Und meine Frage: Ist es möglich, das Programm zu zwingen, "*" zu drucken, anstatt Dateien aufzulisten? Danke im Rat
c
parameters
mingw
main
wildcard-expansion
stasio14
quelle
quelle
*
wird von der Shell interpretiert, nicht vom Programm selbst. Verwenden Sie\*
oder"*"
, um das * an das Programm zu übergeben.*
konvertiert"file1 file2 ..."
wird. Es ist nichts falsch mit Ihrem C-Programm (obwohl das Einschließen<stdlib.h>
nicht erforderlich ist). Um zu verhindern, dass die Shell den Stern konvertiert, verwenden Sie Anführungszeichen:program.exe 1 2 3 "*"
char const* argv[]
ist nicht richtig. Sie dürfen Formen von main () nicht selbst erfinden, das darf nur der Compiler.argv
ist eigentlich Lese- / Schreibspeicher, obwohl das Schreiben oft nicht die beste Idee ist.Antworten:
mingw veranlasst das Programm, eine Wildcard-Erweiterung der Parameter durchzuführen. Fügen Sie Ihrem Programm Folgendes hinzu, um dieses Verhalten zu deaktivieren:
In der Unix-Welt wird erwartet, dass die Shell eine Wildcard-Erweiterung durchführt.
In der Windows-Welt bleibt die Platzhaltererweiterung der Anwendung überlassen.
Das macht das Schreiben von tragbaren Programmen schwierig. Da mingw häufig zum Kompilieren von Programmen verwendet wird, die nicht für Windows geschrieben wurden, führt die C-Laufzeitbibliothek die Platzhaltererweiterung der Parameter automatisch durch.
a.c
::Aber Mingw bietet ein Out. Wenn Sie Ihrem Programm Folgendes hinzufügen, wird dieses Verhalten deaktiviert:
a.c
::quelle