c言語でわからないです、、int n,M,i,j,d=0; printf(

Writer: admin Type: ゃべり、雑談 Date: 2018-12-18 00:00
c言語でわからないです、、int n,M,i,j,d=0; printf("INPUT:\n"); printf("n="); scanf("%d",&;;n); printf("M="); scanf("%d",&M); char C[M][n]; printf("C="); for(i=0;i<M;i++){ scanf("%s",C[i]); } for(i=0;i<M;i++){ printf("%s\n",C[i]); } return 0このようなコードで、試しにn=3.M=2.C=111 000と入れると、なぜか111000000と出力されますどこが間違ってるでしょうか。共感した1###scanf("%s",C[i]);は、読み込んだ文字列の最後に '\0' を入れて文字列の終端を付け加えます。C=111の時点で、文字列 "111" と '\0' の4文字分の領域を使います。'\0' が入る位置は、C[0][3] つまり C[1][0] と同じ位置です。次の "000"は、&C[1][0] から読み込みますが、その位置には前回読み込んだ '\0' が入っていますので、終端文字がなくなります。ついでに、&C[1][3] に '\0' を書き込むので、確保していない領域を破壊してしまいますので、エラー発生の元です。ナイス0
###とても分かりやすい説明ありがとうございます!納得できました。

 

TAG