2015-10-14 27 views
-2

以下代碼失敗,因爲atoi()需要char *,我只通過char。我想存儲只有第一位數字的值。任何想法我怎麼能做到這一點?使用atoi無法接受字符類型 - 任何方式?

int main() { 
    char a[]= "123"; 
    int b = atoi(a[0]); 
    printf("%d",b); 
} 

這裏是確切的錯誤信息:

division.c:9:16: warning: incompatible integer to pointer conversion passing 
     'char' to parameter of type 'const char *'; take the address with & 
     [-Wint-conversion] 
    int b = atoi(a[0]); 
      ^~~~ 
      & 
+0

'的atoi()'旨在字符的空值終止字符串轉換;因此,它不適用於單個字符。如果編譯器允許你的調用,函數會將字符值解釋爲一個地址,這不會導致快樂。你已經看到了如何處理一個數字 - 可以說,你應該在應用'a [0] - '0'轉換之前檢查它是否是一個數字。當然,如果字符串是一個字符串,但atoi()不會返回0,但不能被識別爲數字;函數例如'strtol()'告訴你一個值是否被轉換,或者是太大,等等。 –

回答

5

呀,單個字符不是字符串爲atoi()需要。

如果你只是想要個位數的值,你可以做這樣的:

int b = (a[0] - '0'); 
+0

好戲!...! - – cdonts

+0

你到底是怎麼做到的......它背後的魔法是什麼? – Charana

+0

@Charana'char's被視爲像'int','short','long'等任何數字類型,數學就是你所期望的。 ''0'+ 5 =='5'',''a'+ 3 =='d'',最後是''7' - '0'== 7'。 –

相關問題