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

質問編集履歴

2

説明分の細かな訂正

2018/07/30 02:07

投稿

KIYZ
KIYZ

スコア17

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

文章の細かな修正

2018/07/30 02:07

投稿

KIYZ
KIYZ

スコア17

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