我有以下代碼。我在atoi()中遇到了這一行,並不能理解它做了什麼
while (*str != '\0')
{
digit = *str - '0';
result = result * radix + digit;
str++;
}
*str -'0'
這是什麼意思?
我有以下代碼。我在atoi()中遇到了這一行,並不能理解它做了什麼
while (*str != '\0')
{
digit = *str - '0';
result = result * radix + digit;
str++;
}
*str -'0'
這是什麼意思?
它將ASCII字符'0'到'9'分別轉換爲整數值0到9。 (顯然,如果你確定*str
實際上是字符'0'到'9'中的一個,這只是一個好主意。)
所以如果我的char * str是「string」的話。數字的第一個值是什麼? – 2013-02-13 06:03:15
這是atoi()的無效使用。垃圾進垃圾出。 atoi()的Linux手冊頁說「atoi()不檢測錯誤」。 但是,對您的問題的嚴格回答是:數字的第一個值將是對應於's'的整數值,減去對應於'0'的整數值。 – 2013-02-13 06:05:36
@ RyanV.Bissell不要讀「人」,這是不好的,充滿了錯誤。 C11 7.22.1.2表示atoi相當於'(int)strtol(nptr,(char **)NULL,10)'。 C11 7.22.1.4/8'strtol ...「/ - /」...函數返回轉換後的值(如果有的話)。如果不能執行轉換,則返回零。' – Lundin 2013-02-13 07:45:32
* str可能指向字符值從'0' - '9',然而,如果用* str來使用簡單的算術,那麼可能無法按預期工作。如果* str指向字符'4'並且我們執行'4'+ 2,結果實際上是54,因爲'4'的ASCII值是52.所以通過從* str減去'0',我們將ASCII值轉換爲數字。 「4」 - 「0」 + 2 = 6
該字符值*str
轉換成一個整數,通過從當前字符中減去數字'0'
的編碼值。整數值將在0到9的範圍內。
這可以工作,因爲C保證數字0到9總是使用相鄰值進行編碼(即編碼值'1'
保證與'0' + 1
完全一致,並且等等)。
許多人似乎認爲這「利用」了ASCII的某些事實,但無論系統的本機編碼如何,這都必須適用於C運行的任何平臺。
C中'z' - 'a'是什麼?現在清楚了嗎? – 2013-02-13 05:55:45