2016-03-01 38 views
1

我有一個關於atoi的問題。我正在嘗試使用atoi來檢查是否可以將字符轉換爲數字,但是,如果我的數字爲0,我該如何解決這個問題?我知道atoi如果失敗返回0,但是如果它工作,它也返回數字的值,在這種情況下,0將歸入這兩個類別。Atoi返回值

如果我要使用strtol代替,有沒有辦法檢查數組中的字符是否大於等於0,或者根本不存在/不存在。例如,如果我的動態數組由{1 40 500}組成,並且我嘗試在位置8(剛好超出邊界)進行測試,我希望它返回NULL或者表明atoi/strtol失敗

+2

有了'strtol',你可以使用'endptr'到確定轉換是否成功。 – user3386109

+1

你的意思是「1 40 500」嗎? –

+2

請參閱[正確使用'strtol()']的方法(https://stackoverflow.com/questions/14176123/correct-usage-of-strtol)瞭解如何正確使用'strtol()'。這不是微不足道的。這些信息是可用的;讓所有的條件都正確是很困難的。 –

回答

1

如果我的電話號碼是0我該如何解決這個問題?

通過不使用atoi()在第一位。改爲使用strto*()函數系列的成員。

2

你也可以使用sscanf讀出整數,這樣,只是檢查的sscanf的返回值,看它是否找到了一個整數或不

char a[] = "12"; 
char b[] = "abc"; 
int n = 0; 

assert(sscanf(a, "%d", &n) == 1); 
assert(sscanf(b, "%d", &n) == 0); 
1

通過

動態數組組成{1 40 500}

你的意思是C字符串「1 40 500」?如果是這樣的話,那麼通話時零終止(第8位)與strtol將在第二個參數相同PTR傳遞給它的返回:

char *s = "1 40 500"; 
char *ptr; 
strtol(&s[8], &ptr, 10); 
if (&s[8] == ptr) { 
    // code executed if strtol was called at the null termination 
}