2016-07-31 3 views
-1

配列 "ones"のサイズは10で、それぞれ最大5文字にすることができます。 3の出力は "threefour"、最大文字は5、 "3"のサイズは5です。なぜ "threefour"を印刷するのですか?[3]? コードは次のとおりです。配列のインデックスが3のときは "threefour"、インデックスが7のときは "seveneightnine"の出力はなぜですか?

#include<stdio.h> 
#include<string.h> 
int main(){ 
    char input[8]; 
    printf("Enter the integer: "); 
    scanf("%c",input); 
    char ones[10][5]={"zero","one","two","three","four","five","six","seven","eight","nine"}; 
    printf("%d\n",input[0]-'0'); 
    puts(ones[3]); 
    return 0; 
} 

出力: 整数を入力します:あなたは、範囲外のputs()のアクセスを持っていることによって未定義の動作を呼び出した3 threefour

+1

コードを画像として投稿しないでください。質問に直接コードとしてコードを投稿してください。 – MikeCAT

+0

ようこそstackoverflowは、[良い質問をするにはどうすればいいですか?](http://stackoverflow.com/help/how-to-ask)を読んでコードサンプルを提供してください –

+1

Ohad Eytanありがとうございます。 – Ankesh

答えて

4

onesの各要素には5つの要素しかないので、そこに"three"を格納しようとすると、終了するnull-charcterを格納する余地はありません。これを避けるには、もう1つの要素(つまり、ones[10][6]を使用)を割り当てます。

+0

配列では、サイズを5と指定すると、0-4はデータ、5番目は '\ 0'です。私が間違っていれば私を修正してください。 – Ankesh

+1

これは_undefinedビヘイビアですか?私の知る限り、2-dim配列のメモリの形状はよく定義されているので、最後のヌル文字は 'ones [4] [0]'に侵入し、 '' four ''の 'f 'で上書きされます。 –

+0

@Ankesh Inサイズ5の配列は配列[5]がありません。なぜなら、それは6番目の要素だからです。最後の要素は配列[4]です。 –

関連する問題