我有一個關於atoi的問題。我正在嘗試使用atoi來檢查是否可以將字符轉換爲數字,但是,如果我的數字爲0,我該如何解決這個問題?我知道atoi如果失敗返回0,但是如果它工作,它也返回數字的值,在這種情況下,0將歸入這兩個類別。Atoi返回值
如果我要使用strtol代替,有沒有辦法檢查數組中的字符是否大於等於0,或者根本不存在/不存在。例如,如果我的動態數組由{1 40 500}組成,並且我嘗試在位置8(剛好超出邊界)進行測試,我希望它返回NULL或者表明atoi/strtol失敗
我有一個關於atoi的問題。我正在嘗試使用atoi來檢查是否可以將字符轉換爲數字,但是,如果我的數字爲0,我該如何解決這個問題?我知道atoi如果失敗返回0,但是如果它工作,它也返回數字的值,在這種情況下,0將歸入這兩個類別。Atoi返回值
如果我要使用strtol代替,有沒有辦法檢查數組中的字符是否大於等於0,或者根本不存在/不存在。例如,如果我的動態數組由{1 40 500}組成,並且我嘗試在位置8(剛好超出邊界)進行測試,我希望它返回NULL或者表明atoi/strtol失敗
如果我的電話號碼是0我該如何解決這個問題?
通過不使用atoi()
在第一位。改爲使用strto*()
函數系列的成員。
你也可以使用sscanf
讀出整數,這樣,只是檢查的sscanf的返回值,看它是否找到了一個整數或不
char a[] = "12";
char b[] = "abc";
int n = 0;
assert(sscanf(a, "%d", &n) == 1);
assert(sscanf(b, "%d", &n) == 0);
通過
動態數組組成{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
}
有了'strtol',你可以使用'endptr'到確定轉換是否成功。 – user3386109
你的意思是「1 40 500」嗎? –
請參閱[正確使用'strtol()']的方法(https://stackoverflow.com/questions/14176123/correct-usage-of-strtol)瞭解如何正確使用'strtol()'。這不是微不足道的。這些信息是可用的;讓所有的條件都正確是很困難的。 –