質問編集履歴
2
説明分の細かな訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
今月 C の勉強を始めたばかりの者です。
|
2
2
|
`strncpy()`関数について学んでいる時に疑問を抱きました。
|
3
3
|
|
4
|
-
`strncpy()`関数呼び出し時にコピー先として指定する配列として、コピーする文字数が収まらない要素数を持つ配列を指定した時、
|
4
|
+
`strncpy()`関数呼び出し時にコピー先として指定する配列として、コピーする文字数が収まらない要素数を持つ配列を指定した時、コピーが成功するという現象が起こりました。
|
5
5
|
|
6
6
|
|
7
7
|
###対象のプログラム
|
1
文章の細かな修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
```
|
24
24
|
|
25
|
-
プログラム1のコンパイル結果:
|
25
|
+
プログラム1のコンパイル結果 (警告内容は理解しています。) :
|
26
26
|
```
|
27
27
|
main15.c: In function ‘main’:
|
28
28
|
main15.c:29:20: warning: initializer-string for array of chars is too long
|
@@ -65,7 +65,7 @@
|
|
65
65
|
|
66
66
|
|
67
67
|
###疑問
|
68
|
-
1. プログラム2の`strncpy()`関数でコピー先として指定している配列の要素数は 1 であるため、 "foobar" が収まらないはずですが、実行時にプログラム1のような
|
68
|
+
1. プログラム2の`strncpy()`関数でコピー先として指定している配列の要素数は 1 であるため、 "foobar" が収まらないはずですが、実行時にプログラム1のような警告が出ず、正常にコピーが実行されるのはなぜなのでしょうか。
|
69
69
|
2. プログラム2の`str2[]`宣言時に指定する要素数として、`コピーする文字数 + 終端文字` (今回の場合は 7 )未満の数を指定すると、 `printf("str1 => %s\n", str1);` の結果が "foobar" の一部しか表示されなかったり、何も表示されないという現象が起こりますが、これはなぜなのでしょうか。
|
70
70
|
なぜコピー元の配列の値が変化することがあるのでしょうか。
|
71
71
|
|