teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2016/08/18 06:09

投稿

moonphase
moonphase

スコア6621

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`が出現するまでメモリ内をアクセスします。