3 回答

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

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

TA貢獻(xiàn)1829條經(jīng)驗 獲得超6個贊
根據(jù)C ++標(biāo)準(zhǔn),第3.6.1節(jié):
argv [0]應(yīng)該是指向NTMBS的初始字符的指針,該NTMBS表示用于調(diào)用程序的名稱或“”
所以不,至少在標(biāo)準(zhǔn)方面,它無法得到保證。
- 3 回答
- 0 關(guān)注
- 870 瀏覽
添加回答
舉報