質問: {0}; printf("tume[5]に任意の文字列を入力して。\n"); //tumeの内容 scanf("%s",tume); putchar('\n'); //tumeを表示 printf("tume[5]:"); for(i=0;tume[i] != '\n' ; ++i) printf("%c",tume[i]); putchar('\n'); return 0; } /*tume[5]に任意の文字列を入力して kubomi tume[5]:kubota */ ``` このような結果になったのですが、 配列tume[5]には 4文字分+ヌル文字のみ が格納されていると考えられます。 それならばなぜ4文字以上表記できるのでしょうか?
回答: `scanf("%s", tume)`だと、配列tumeに入力された文字数全て格納してしまいます。 ただ、tumeは5バイト分しか確保されてないので、4文字以上入力すると配列のオーバーアクセスになってしまいます。 見た目入力した分全て表示されますが、配列をオーバーアクセスしているので一般保護例外が発生したりしてしまいます。 なので、配列として十分なサイズを確保するか、scanf_sの様なバッファのサイズを指定できる関数を使うか、scanfではなくgetcharなどで文字を一文字ずつ読み出してENTERキーが押されたら読み出しを終了するなどの処理が必要になります。