2016-10-10 49 views
-1

在下面的代碼,如何顯示字符數組?

#include<stdio.h> 
int main(){ 
    char string[] = {1, 2, 3}; 
    char* my_pointer = string; 
    printf("%c", *my_pointer); 
} 

上午期待ASCII字符'1'將顯示在屏幕上。

ASCII字符'1'49用二進制表示爲00110001

+2

1不等於49 –

+0

@ChristopherSchneider錯字。我期待'1'被類型轉換爲''1'',因爲'string'是'char'數組 – overexchange

+1

沒有錯字。您正在輸入一個值爲1的字符,並期望打印49('1')。 –

回答

4

你需要給它字符初始化時:

char string[] = {'1', '2', '3', '\0'}; 

,或者你可以初始化使用字符串

char string[] = "123"; 

當你使用數字如

char string[] = {1, 2, 3}; 

它將打印對應於數字1的ASCII字符(很可能不會產生任何輸出)。

如果你想用數字來初始化,你必須做到:

char string[] = {49, 50, 51}; 
+0

爲什麼我需要給出''1''而不是'1'。 C是一種鬆散類型的語言。'1'必須被轉換爲'1',因爲它是'字符串'是'char' array – overexchange

+0

語法''1'對應於等於數字49的字符'1'。使用字符的語法,例如字母a'''' – 4386427

+0

哦,你的意思是'SOH'字符在ASCII圖表中的值爲'1',所以不能打印 – overexchange

0

你行

char string[] = {1, 2, 3}; 

聲明一個有三個整數文字初始化3個char值的數組。要使用char文字進行初始化,請使用如下的單引號運算符'

char string[] = {'1', '2', '3', '\0'}; 

注意,初始化你需要包括空終止,因爲我在上面所做的數組,當否則你到printf調用將導致未定義行爲。在你對上述答案之一的評論中,你問

爲什麼我需要給'1'而不是1. C是一個鬆散類型的語言。 1必須被鑄造類型爲「1」,因爲它是字符串是字符數組

記住一個char引擎蓋下是一個數字的只是一個表示; '字符字面'語法只是語法糖,它允許您以更加語義的方式創建字符常量。

char variable1 = 49; 
char variable2 = '1'; 

在這個例子中,這兩個語句是完全等價的。如果C應該按照你建議的方式施放,是否應該將49轉換爲4,9或者可能是字符串「49」?這不清楚。 C是一種懶惰的語言 - 它不會做任何聰明的技巧來幫助你,所以當你設置一個字符值爲49時,它會分配數值。

相關問題