簡體   English   中英

C命令行參數檢查

[英]C command line argument check

我有下面的代碼部分,我注意到如果我將0更改為1,結果是相同的。 我得到了STACKprint(); 將“on”作為第二個參數,沒有任何其他內容,如果沒有參數,我會得到一個分段錯誤。 我想對於分段錯誤我需要檢查參數是否為NULL但是我不知道如何用第二個參數做到這一點它確實讓我知道為什么(strcmp (argv[2],"on") == 1)沒有效果。 是不是應該采取TRUE值?

 if (strcmp (argv[2],"on") == 0) {
            STACKprint();
            printf("\n");
 }

要避免segfault,請檢查argc的值以發現argv[2]是否存在。 如果argc < 3 ,則不提供argv[2]

strcmp()不返回true / false; 它返回一個小於,等於或大於零的值,具體取決於其參數的相對值。

首先,要檢查是否存在參數,您應該使用main main(int argc, char** argv)的argc變量,它指示argv數組的長度。

if (argc < 3) {
  printf("missing argument\n");
  exit(-1);
}

對於strcmp ,手冊頁僅聲明如果參數中的兩個字符串相等則返回0,否則為非零......但不一定是1.實際上它是依賴於實現的。 因此,使用它來檢查字符串相等性的方法是:

if (0 == strcmp(argv[2], "on")) {
   // do something
} else {
   // do something else
}

如果你的程序是這樣的

#include <stdio.h>


  int main (int argc, char**argv)
  {
     if (argc >= 3 && strcmp (argv[2],"on") == 1){
  //        STACKprint();
          printf("\n");
      }
  }

並且你嘗試在myexe 1 on運行它,它永遠不會進入if塊,如果你將1更改為0,它將會運行。

還有別的錯。

如果您可以發布您的代碼以及您調用它的方式,那將是很好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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