[英]How to check if an argument was given or not?
//Checks if an argument was specified
if (argv[1] != "")
strcpy(Buff1, argv[1]);
else
strcpy(Buff1, "default");
如果我運行: ./program test
Buff1 = 測試
如果我運行: ./program
Buff1 = PACKAGES/=包
如果未指定任何內容,我該如何制作,默認情況下 Buff1 將是“默認”?
好的,如果什么都沒有傳遞,argc 將是 1(argc 給出傳遞參數的數量)。 這意味着唯一包含任何內容的 argv 元素將是 argv[0](其中包含程序的名稱)。 這意味着對 argv[1] 的調用將是一個超出范圍的索引,可能會導致崩潰,或者如果你幸運的話只會是垃圾數據。
if(argc == 1)
strcpy(Buff1, "default");
else if(argc == 2)
strcpy(Buff1, argv[1]);
else
//do something here if there is more than 1 argument passed to it
還值得注意的是,您傳遞示例參數的方式不適用於您的意圖:“./program test Buff1 = test”將導致 argc 為 4,而 argv[0] 為“test”,argv [1] 為“Buff1”,argv[2] 為“=”,argv[3] 為“test”。
只需調用“./program test hellooo”就可以使用我提供的程序片段,用“helllooo”填充 Buff1。 調用“./program test”也可以,用“default”填充 Buff1。 要進行更高級的操作,您將不得不使用命令行開關(例如 ./program test -b somethinghere -x somethinghere),這只是解析 argc 和 argv 的一種更高級的方法。
argc
為您提供傳遞給程序的參數數量。 請記住, argc
不能小於 1,因為argv[0]
始終是程序的名稱,因此如果沒有傳遞參數,您應該使用它if(argc == 1){}
使用argc
了解主要參數是如何傳遞的。 Shell 或進程調用程序通常為程序提供至少一個參數,即程序名稱本身,並且始終是第一個參數。 事實證明,至少argc=1
,而argv[0]
是程序名。
int main(int argc, char **argv){
// declarations and all here
if(argc<2){
strcpy(Buff1, "default");
}
else{
strcpy(Buff1, argv[1]);
}
return 0;
}
如果不使用它,您將遇到兩個問題。 當您使用argv[1]
時,當argc=1
時,您實際上將數組越界。 因為, c++
不會為您做任何邊界檢查,有時您的程序可能會在靜默訪問 argv[0] 旁邊的內存地址時失敗。 另一個問題是您正在嘗試將字符串與!=
運算符進行比較。 您不能立即使用==
/ !=
運算符比較字符串文字。 您必須使用strcmp
或等效函數。
使用argc
確定參數計數。 如果沒有給出參數,它將等於 1,如果給出一個參數,它將等於 2。
請注意,您不能使用==
運算符比較 C 字符串。 這是指針比較。
建議:使用 argv.size() 來獲取計數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.