亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“argv [0] =可執行文件名稱”是一個公認的標準還是只是一個共同的約定?

“argv [0] =可執行文件名稱”是一個公認的標準還是只是一個共同的約定?

C++
湖上湖 2019-09-06 12:06:55
“argv [0] =可執行文件名稱”是一個公認的標準還是只是一個共同的約定?main()在C或C ++應用程序中傳遞參數時,將argv[0]始終是可執行文件的名稱?或者這只是一個常見的約定,并不保證100%的時間都是真的?
查看完整描述

3 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

猜測(即使是有教育意義的猜測)很有趣,但你確實需要去標準文件。例如,ISO C11陳述(我的重點):

如果值argc大于零,則指向的字符串argv[0] 表示程序名稱; argv[0][0]如果程序名不能從主機環境獲得,則應為空字符。

所以不,如果該名稱可用,它只是程序名稱。“代表”程序名稱,不一定程序名稱。之前的部分說明:

如果值argc大于零,則argv[0]通過argv[argc-1]包含的數組成員應包含指向字符串的指針,這些指針在程序啟動之前由主機環境給出實現定義的值。

這與之前的標準C99相同,并且意味著即使這些也不是由標準決定的 - 它完全取決于實現。

這意味著,節目名稱可以是空的,如果主機環境如果主機環境提供它,別的提供的,規定“任何東西”在某種程度上代表了程序名稱。在我更悲慘的時刻,我會考慮將其翻譯成斯瓦希里語,通過替換密碼運行它,然后以反向字節順序存儲它:-)。

但是,實現定義確實在ISO標準具有特定含義 - 實現必須記錄其工作原理。因此,即使UNIX,它可以把任何東西它喜歡到argv[0]exec家人通話的,有(并執行)文件就可以了。



查看完整回答
反對 回復 2019-09-10
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

*nix具有exec*()呼叫的類型系統下,argv[0]將是呼叫者在呼叫中放入的任何argv0地方exec*()。

shell使用這是程序名稱的約定,并且大多數其他程序遵循相同的約定,因此argv[0]通常是程序名稱。

但是一個流氓Unix程序可以調用exec()并制作argv[0]任何它喜歡的東西,所以無論C標準說什么,你都不能指望這個100%的時間。



查看完整回答
反對 回復 2019-09-10
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

根據C ++標準,第3.6.1節:

argv [0]應該是指向NTMBS的初始字符的指針,該NTMBS表示用于調用程序的名稱或“”

所以不,至少在標準方面,它無法得到保證。


查看完整回答
反對 回復 2019-09-10
  • 3 回答
  • 0 關注
  • 479 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號