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