2014-04-18 29 views
0

我希望能夠將任何無符號長整數作爲我的程序的參數。考慮這個簡化版本。防止C解釋sscanf中的負整數

int main (int argc, char* argv[]){ 

unsigned long int steps; 

sscanf(argv[1], "%lu", &steps); 

printf("n is %lu \n",steps); 

} 

我的問題是,如果你給它-10將返回ULONG_MAX - 10,有一個優雅的解決方案,將返回我的整數範圍和0所有其他情況時。從我讀的內容來看,我可能需要以某種方式將fgets與正則表達式一起使用,也許這是最好的解決方案?

回答

1

您可以使用atol()並檢查返回的值。這裏有一個小例子:

#include <stdio.h> 
#include <stdlib.h> 

int 
main(int argc, char **argv) 
{ 
    unsigned long int steps = 0; 

    if (argc > 1) 
    { 
     if (atol(argv[1]) > 0) 
     steps = atol(argv[1]); 
    } 

    printf("%lu\n", steps); 

    return 0; 
} 
+0

好酷感謝,我玩過atol一點,有沒有未簽名的計數器部分,或者我應該忘記使它未簽名?簽署它可能不是太嚴格。 – User

+0

我已經編輯了一些代碼。希望這更適合你的需求... –

+0

Yer應該是好的,歡呼的芽。 – User