回答編集履歴
1
追記
answer
CHANGED
@@ -2,4 +2,12 @@
|
|
2
2
|
`char str[16];`に`\0`含めて収まる状態でない場合はオーバーフローです。
|
3
3
|
|
4
4
|
但し、オーバーフローが発生してもプログラムがどのように動くかは何ともいえません。
|
5
|
-
使われない領域が破壊されてもプログラムは動きます。
|
5
|
+
使われない領域が破壊されてもプログラムは動きます。
|
6
|
+
|
7
|
+
以下、追記
|
8
|
+
|
9
|
+
`char str[16];`は16個の配列を確保するのではなく、16バイトのメモリ領域を確保しただけにすぎません。
|
10
|
+
その17バイト目以降も、何かしらの領域があります。
|
11
|
+
|
12
|
+
`char str[16];`した場合は、C言語の文字列終端文字`\0`も含め16バイトで収まるようにしましょう。
|
13
|
+
もし、そうなっていない場合は文字列を扱う関数は`\0`が出現するまでメモリ内をアクセスします。
|