2017-12-19 4 views
-3

こんにちは私はCが新しく、自分で設定したストリングを印刷しようとしていますが、それはジャンクを印刷します。なぜ文字列ショージャンクを印刷するのですか

私はid[4]'\0'だから私はそれを設定しなかったことを知っています。

int main(){ 
    char id[5]; 
    printf("Enter a string\n"); 
    id[0]=1;id[1]=2;id[2]=3;id[3]=4; 
    printf("You entered the string %s\n",id); 
} 
+9

文字列は、迷惑文字を入れるために迷惑メールを出力します。 4つの文字コードのいずれも印刷可能な文字に対応しません。その上に 'id [4]'はゼロではないので、それはジャンクです。 – dasblinkenlight

+2

あなたは何を*印刷するのですか? '1 '(例えば)は' '1' 'とまったく同じではないことに気づいていますか? –

+2

id [4] = '\ 0'に設定する必要があります。あなたの配列は "自動的に終了"されません –

答えて

7

私はid[4]'\0'

さて、あなたは間違っていることを知っています。

idは、明示的に初期化されない限り、不確定な値を含みます。だから、'\0'はもちろんのこと、あなたはどんな価値も確信できません。 C11を引用

、§6.7.9

自動記憶域期間を持つオブジェクトを明示的に初期化されていない場合は、その値が 不定です。 [...]

あなたが

char id[5] = {0}; 

のようにそれを初期化する場合は、初期設定のルールによって、すべての要素が0に初期化され、あなたはその後、NULL終端に頼ることができます。

関連する問題