回答編集履歴

1

バグの修正

2020/03/11 14:35

投稿

majiponi
majiponi

スコア1722

test CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  printf関数の実行前に、number2 = '9';という一行を追加してみてください。多分、543219のように表示されると思います。つまり、number2に代入した文字が表示されてしまうわけです。原因は、number1の要素数です。5桁の整数だから5文字で足りる、そう思うかもしれません。しかし、printf関数で表示する場合は異なります。printf関数の%s指定は、ヌル文字に出会うまでずっと、(配列のメモリ領域を超えても)文字を表示し続ける仕様になっています。今回は、number1の領域の直後にnumber2の領域があり、そのあとヌル文字が入っていたため、6文字が出力されたのです。
4
4
 
5
- 直し方は簡単で、配列の大きさを6文字分にするか、%s指定をやめて、%5cのように指定すればよいです。
5
+ 直し方は簡単で、配列の大きさを6文字分にするか、%s指定をやめて、%.5sのように最大文字数を指定すればよいです。