2016-03-26 46 views
2

我有一個非常奇怪的問題。我通過以下命令在Objective-C程序的命令行中傳遞多個參數。將星號傳遞給命令行程序會使文件名顯示在argv

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

./prog1 3 + 5/8 

當我打印argcargv[]它給了我下面的輸出是正確

argc = 6 

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

當我插入一個「*」在輸入中發生問題:./prog1 3 + 5/8 * 8然後,它給了我真的很奇怪輸出

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

怎麼回事?

回答

2

您有2個選項

  • 逃生每個單獨的特殊符號用一個反斜槓(\*)或
  • 雙引號的參數(如"*")。
+0

謝謝Debosmit :) –

+0

@ user3688117絕對:)這將是很好,如果你可以接受/ upvote一個答案,如果你的問題得到解決。從[這裏](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),「接受答案是重要的,因爲它既獎勵海報解決你的問題,並告知其他人你的問題解決了。「 –

+0

這是我嘗試做的第一件事,但我不能投票,直到我的聲譽達到15。我是堆棧溢出的新手,我不知道該怎麼做。 –

3

您正在運行的shell將星號解釋爲file glob;在將參數傳遞給程序之前,它將用當前目錄中所有文件的名稱替換該字符。

您需要轉義星號\*以便按字面順序傳遞。這也適用於您的shell解釋的其他字符,例如引號"',反斜槓和&符號。

+0

非常感謝Josh。它已經解決了我的問題:) –

+0

很高興我能幫上忙。 –

相關問題