回答編集履歴

2

追記2

2023/03/10 03:12

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -12,3 +12,14 @@
12
12
  d は s1[6] を指しています。
13
13
  forループで、d[i] は s1[12] です。
14
14
  そこに '\0' を入れることで、配列の範囲外の領域を破壊します。
15
+
16
+ **追記2**
17
+ strncpy は、このようにも書けます。
18
+ ```C
19
+ char *strncpy(char *d, const char *s, size_t n)
20
+ {
21
+ for (size_t i = 0; i < n; i++)
22
+ if (d[i] = *s) s++;
23
+ return d;
24
+ }
25
+ ```

1

追記

2023/03/10 02:29

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -1,2 +1,14 @@
1
1
  `d[i] = '\0';` で s1[10]以降に '\0' を入れています。
2
2
  やいたいことは `*d++ = '\0';` ではありませんか?
3
+
4
+ **追記**
5
+ 変数の変化をちゃんと見ましょう。
6
+
7
+ `strncpy(s1, "12345", 7);` で呼び出したとき、
8
+ d は s1[0] を指しています。
9
+ whileループが終了した時点で、
10
+ s1[0] = '1'、s1[1] = '2'、...、s1[5] = '\0' で、
11
+ i は 5 ですが、`i++;` で i は 6 になります。
12
+ d は s1[6] を指しています。
13
+ forループで、d[i] は s1[12] です。
14
+ そこに '\0' を入れることで、配列の範囲外の領域を破壊します。