2016-01-18 44 views
0

我知道,這裏有一些解決方案在stackoverflow上。但我不知道爲什麼不能開展一項工作。打印字符的ASCII值給出了意想不到的輸出

  char *ink[90] 
      strcpy(ink, "hi"); 
      printf("stepiii %c \n",ink[0]); 
      printf("ascii %d\n",ink[0]); 

而是 「ASCII 104」 的返回錯誤值一樣

「ASCII 26984」

我在做什麼錯?

+1

閱讀警告....'strcpy(ink,「hi」);'' –

+0

也不是'%d'是'char'參數的錯誤格式說明符。使用'%hhd'。 – Olaf

+0

@Olaf默認參數提升沒有考慮到這一點嗎? –

回答

3

在你的代碼,

char *ink[90] 

是錯誤的。您不需要指針數組,如其他代碼片段所示。改變,要

char ink[90]= {0}; 

如果你想知道前面的輸出,該代碼調用undefined behavior。所以,輸出本質上是沒有意義的,不可信任。

2

您正在創建一個指針數組並向其複製字符。你需要的char數組和字符複製到它,這樣

char ink[90] 
strcpy(ink, "hi"); 
printf("stepiii %c \n", ink[0]); 
printf("ascii %d\n", ink[0]); 

你遇到了什麼是錯的,因爲ink[0]是數組中的第一指針的地址,你strcpy()初始化數組這應該觸發不兼容指針類型警告,啓用編譯警告以避免這種情況。

它在你的代碼中的方式調用未定義的行爲和你的程序可能會崩潰或任何事情可能發生。打印的值沒有意義。

相關問題