3 回答

TA貢獻2065條經驗 獲得超14個贊
猜測(即使是有教育意義的猜測)很有趣,但你確實需要去標準文件。例如,ISO C11陳述(我的重點):
如果值
argc
大于零,則指向的字符串argv[0]
表示程序名稱;argv[0][0]
如果程序名不能從主機環境獲得,則應為空字符。
所以不,如果該名稱可用,它只是程序名稱。它“代表”程序名稱,不一定是程序名稱。之前的部分說明:
如果值
argc
大于零,則argv[0]
通過argv[argc-1]
包含的數組成員應包含指向字符串的指針,這些指針在程序啟動之前由主機環境給出實現定義的值。
這與之前的標準C99相同,并且意味著即使這些值也不是由標準決定的 - 它完全取決于實現。
這意味著,節目名稱可以是空的,如果主機環境不如果主機環境提供它,別的不提供的,規定“任何東西”在某種程度上代表了程序名稱。在我更悲慘的時刻,我會考慮將其翻譯成斯瓦希里語,通過替換密碼運行它,然后以反向字節順序存儲它:-)。
但是,實現定義確實在ISO標準中具有特定含義 - 實現必須記錄其工作原理。因此,即使UNIX,它可以把任何東西它喜歡到argv[0]
與exec
家人通話的,有(并執行)文件就可以了。

TA貢獻1719條經驗 獲得超6個贊
在*nix
具有exec*()
呼叫的類型系統下,argv[0]
將是呼叫者在呼叫中放入的任何argv0
地方exec*()
。
shell使用這是程序名稱的約定,并且大多數其他程序遵循相同的約定,因此argv[0]
通常是程序名稱。
但是一個流氓Unix程序可以調用exec()
并制作argv[0]
任何它喜歡的東西,所以無論C標準說什么,你都不能指望這個100%的時間。

TA貢獻1829條經驗 獲得超13個贊
根據C ++標準,第3.6.1節:
argv [0]應該是指向NTMBS的初始字符的指針,該NTMBS表示用于調用程序的名稱或“”
所以不,至少在標準方面,它無法得到保證。
- 3 回答
- 0 關注
- 479 瀏覽
添加回答
舉報