3 回答

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

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

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