2017-01-19 1 views
-3

は「」、私がしなければ、私は理解して「」

char a= 'a';//gets stored as a 1 byte char 

そして"a"\0その最後のバイトと2バイトの文字列を意味し保存し、プリントアウトします。

私はそれは

@

int main(void) { 
    char a= "a"; 
    printf("\n\r%c", a); 
    return 0; 
} 

をoutputs-ランと私は

int main(void) { 
    char a= 'a'; 
    printf("\n\r%c", a); 
    return 0; 
} 

を実行した場合には第二の場合には、予想通り、私は取得

をoutputs-場合、なぜ私は最初のケースで@を得ているのか不思議ですか?

+4

は警告してコンパイルします。 – Max

答えて

4

文字列は文字の配列です。配列がr値として使用されると、配列は最初の要素へのポインタに変換されます。だから、やるとき:あなたはaに文字列のアドレスを記憶している

char a = "a"; 

、ない最初の文字。これは、インプリメンテーション依存のポインタから文字への変換をもたらします。これは、結果として、@文字と同じ文字コードになるためです。文字列のアドレスは多くの要因に依存するため、通常は予測できません。と同等です

char変数への最初の文字を取得するには

char *str = "a"; 
char a = str; 

、2行目はなければならないであろう。

char a = *str; 
+0

完璧!ありがとうございました! – Anurag

0

あなたはこの

char ch = "a"; 

をしようとすると、後者の場合にはあなたが単一の文字を挿入する形式を使用している文字列を挿入しようとしているので。だから、何のエラーも表示されません。

関連する問題