簡體   English   中英

如何檢查是否給出了參數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM