main(int argc, char *argv[]) {
int i = 0;
unsigned long long input = strtoull(argv[1],NULL,10);
if (argc < 2){
puts("Need an argument");
return 0;
}
}
任何人都可以解釋爲什麼如果我只是在沒有參數的情況下在cmd中輸入程序名稱,這段代碼崩潰了嗎?我的代碼沒有捕獲空參數c
編輯:
新的代碼仍然空參數瞬間崩潰:
main(int argc, char *argv[]) {
if (argc > 2){
puts("Too many arguments");
return 0;
}
if (argc < 2){
puts("Need an argument");
return 0;
}
if(argv[1][0] == '-'){
puts("Sorry, no negative numbers, try another input"); // no negatives
return 0;
}
當'argv [1]'是NULL並且它被取消引用時,你期望發生什麼?你需要檢查自己,而不是期望庫代碼爲你做。 – mah
但如果argv [1]爲空,那麼argc小於2,它應該捕獲它 – Jacob
@jacob您的行的順序非常重要。你首先做潛在的危險操作,然後再檢查,這是錯誤的。 – BitTickler