回答編集履歴

1

追加

2016/01/19 07:50

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -31,3 +31,31 @@
31
31
  char name[100];は最大99文字の文字列を保存できます。文字数は適切な値を設定するのが良いです。
32
32
 
33
33
  バッファオーバーフローに注意下さい。
34
+
35
+
36
+
37
+ ---
38
+
39
+ 因みにリファレンスをみて下記のように書くと通常はruntimeエラーになります。
40
+
41
+
42
+
43
+ ```C++
44
+
45
+ char *name;
46
+
47
+ strcpy(name, "Cheironian");
48
+
49
+ ```
50
+
51
+ C言語のFAQです。リファレンス通り書いたのに!!って感じた人が、たぶん何万人もいると思います。
52
+
53
+ strcpy()は第1引数が示すアドレスへ第2引数が示すアドレスからの文字列をコピーします。
54
+
55
+ char *name;と書いただけだとnameの値は不定ですね。なので、第一引数が示すアドレスは不定です。
56
+
57
+ たまたまそれが適切なアドレスにならない限り、不正なメモリへの書き込みとなるのです。
58
+
59
+
60
+
61
+