我實現了atoi函數。第一個條件時給出錯誤的答案,而第二個條件,同時給了我正確的答案(提供我遞增,而塊ofcourse裏面的指針)C在條件內部增加一個函數內部的變量
while(isdigit(*(str++)))
while(isdigit(*str))
這是爲什麼?
不應該有條件評估'str'然後增加。然後解除評估地址的引用。然後將它傳遞給isdigit?
有條件的時候(只要它在循環內部增加了)就不會與第二條相同嗎?
下面是完整的代碼,以防萬一:
int atoi(char *str)
{
int sign, number = 0;
while(isspace(*str))
++str;
sign = (*str == '-') ? -1 : 1;
if(*str == '-' || *str == '+')
str++;
//while(isdigit(*(str++)))
while(isdigit(*str))
{
number = 10 * number + (*str - '0');
str++;
}
return sign * number;
}
我很抱歉,剛剛意識到你爲什麼說*潛在*你是100%正確的。如果'isspace()'失敗,它將使指針增加。 –
準確地說,不是'if'isspace()'失敗',而是'if'isspace()'返回'false''。 「失敗」意味着該功能會錯誤地將輸入字符分類。 – CiaPan