2016-03-26 10 views
2

Ich habe wirklich seltsames Problem. Ich gebe mehrere Argumente in der Befehlszeile meines Objective-C-Programms über die folgenden Befehle.Das Übergeben eines Sternchens an ein Befehlszeilenprogramm lässt Dateinamen in argv erscheinen

gcc -framework Foundation main.m calculator.m -o prog1 

./prog1 3 + 5/8 

Wenn ich drucken argc und argv[] es gibt mir folgende Ausgabe, die korrekt ist

argc = 6 

argv[] = prog1,3,+,5,/,8 

Das Problem tritt auf, wenn ich ein „*“ in der Eingabe einfügen: ./prog1 3 + 5/8 * 8 Dann ist es mir wirklich seltsam Ausgang gibt

argc = 12 
argv [] = 3,+,5,/,8,calculator.h,calculator.m,main.m,prog1,8 

Was läuft falsch?

Antwort

2

Sie haben 2 Möglichkeiten

  • Flucht jedes einzelne Sonderzeichen mit einem Backslash (\*) oder
  • Doppel-Zitat das Argument (wie in "*").
+0

Danke Debosmit :) –

+0

@ user3688117 Absolut :) Es wäre nett, wenn Sie eine Antwort annehmen/upvote eine Antwort, wenn Ihr Problem gelöst ist. Von [hier] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work), "Die Annahme einer Antwort ist wichtig, da sie sowohl Poster zur Lösung Ihres Problems belohnt als auch andere informiert dass dein Problem gelöst ist. " –

+0

Das ist das erste, was ich versuche zu tun, aber ich kann nicht wählen, bis mein Ruf 15 erreicht hat. Ich bin neu im Stapelüberlauf und ich weiß nicht, wie ich das machen soll. –

3

Die Shell, von der Sie ausgeführt werden, interpretiert den Stern als file glob; Es ersetzt dieses Zeichen durch die Namen aller Dateien im aktuellen Verzeichnis, bevor die Argumente an Ihr Programm übergeben werden.

Sie müssen das Sternchen \* entkommen, damit es wörtlich weitergegeben wird. Dies gilt auch für andere Zeichen, die Ihre Shell interpretiert, z. B. die Anführungszeichen " und ', Backslashes und Et-Zeichen.

+0

Vielen Dank Josh. Es hat mein Problem gelöst :) –

+0

Ich bin froh, dass ich helfen konnte. –