#include<stdio.h>
int main(){
char string[] = {1, 2, 3};
char* my_pointer = string;
printf("%c", *my_pointer);
}
は、画面に表示されるASCII文字'1'
を期待しています。
ASCII文字'1'
を初期化するときは、それを文字を与える必要があり00110001
#include<stdio.h>
int main(){
char string[] = {1, 2, 3};
char* my_pointer = string;
printf("%c", *my_pointer);
}
は、画面に表示されるASCII文字'1'
を期待しています。
ASCII文字'1'
を初期化するときは、それを文字を与える必要があり00110001
としてバイナリ表現と49
次のとおりです。
char string[] = {'1', '2', '3', '\0'};
たり、文字列
char string[] = "123";
あなたを使用して初期化することができます
のような数字を使用してくださいchar string[] = {1, 2, 3};
数字1に対応するASCII文字が出力されます(ほとんどの場合、出力は生成されません)。
あなたは数字を使用して初期化したい場合は、あなたが行う必要があります。
char string[] = {49, 50, 51};
なぜ '1'の代わりに' '1''を与える必要がありますか? Cは緩やかに型付けされた言語です。'1'は' string 'が 'char'配列であるため' 1'に型キャストされなければなりません。 – overexchange
構文 '' 1 'は数字49に等しい文字' 1 'に対応します。文字の構文を使用します。 "a"は文字のため – 4386427
ああ、 'SOH'文字はASCIIチャートの値が' 1'なので、印刷できませんでした – overexchange
あなたのライン
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に設定すると、数値が割り当てられます。
1は等しくない49 –
@ChristopherSchneider typo。 'string'は' char'配列であるため '1 'に型キャストされると期待しています – overexchange
typoはありません。値1のcharを入力していて、49( '1')が必要です。 –