2016-10-10 13 views
-1

は、文字配列の表示方法は?以下のコードで

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

は、画面に表示されるASCII文字'1'を期待しています。

ASCII文字'1'を初期化するときは、それを文字を与える必要があり00110001

+2

1は等しくない49 –

+0

@ChristopherSchneider typo。 'string'は' char'配列であるため '1 'に型キャストされると期待しています – overexchange

+1

typoはありません。値1のcharを入力していて、49( '1')が必要です。 –

答えて

4

としてバイナリ表現と49次のとおりです。

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'は' string 'が 'char'配列であるため' 1'に型キャストされなければなりません。 – overexchange

+0

構文 '' 1 'は数字49に等しい文字' 1 'に対応します。文字の構文を使用します。 "a"は文字のため – 4386427

+0

ああ、 'SOH'文字はASCIIチャートの値が' 1'なので、印刷できませんでした – overexchange

0

あなたのライン

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

は、3つの整数リテラルで初期化3つのchar値の配列を宣言します。 charリテラルで初期化するには、次のように一重引用符演算子'を使用します。

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

注あなたは、私がそうprintfへのお電話は未定義の動作になり、上記の行っているとしてnullターミネータを含める必要があり、配列を初期化するときに。上記の回答の1つにあなたのコメントをお願いします。

なぜ1にする代わりに1を与える必要がありますか?Cは緩やかに型付けされた言語です。それは文字列は文字列であるため 1は、タイプが「1」にキャストされなければならない

フードの下charは数だけであることに注意してください。 '文字リテラル'構文は、より意味のある方法で文字定数を作成できる構文糖だけです。

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

この例では、2つのステートメントはまったく同じです。 Cがあなたが提案した方法でキャストする必要がある場合、49を4,9、またはおそらく文字列 "49"にキャストする必要がありますか?これは不明です。 Cは怠惰な言語です - それはあなたを助ける巧妙なトリッキーを行いません。したがって、charを値49に設定すると、数値が割り当てられます。

関連する問題