回答編集履歴
2
語句修正
answer
CHANGED
@@ -15,4 +15,4 @@
|
|
15
15
|
> 終端文字がない場合、コンピュータはどうやって配列の終了を認識しているのでしょうか?
|
16
16
|
|
17
17
|
上に書いた通り、c[0] 〜 c[4] に終端文字 '\0' が無くても、続くメモリのどこかに '\0' は見つかります。即ち、終端文字はどこかに存在します。
|
18
|
-
そもそも、終端文字を見つけるのは「コンピュータ」ではありません。printf()という関数です。そして、printf("%s", 〜) は表示する
|
18
|
+
そもそも、終端文字を見つけるのは「コンピュータ」ではありません。printf()という関数です。そして、printf("%s", 〜) は表示する配列の長さに関係なく動作します。大きさ5の配列を渡しても1文字しか表示しない場合もあれば10文字でも20文字でも表示してしまうことがある、という事実を貴方は確認したのです。そして、それは間違いでも何でもない、printf() は仕様通りの動作をしているのです。
|
1
追記
answer
CHANGED
@@ -9,4 +9,10 @@
|
|
9
9
|
> hello\366\277\357\376
|
10
10
|
> と出力されました。
|
11
11
|
|
12
|
-
'\0' が現れるまでのメモリに、たまたま「\366\277\357\376」と表示される値のメモリが続いていたのです。
|
12
|
+
'\0' が現れるまでのメモリに、たまたま「\366\277\357\376」と表示される値のメモリが続いていたのです。
|
13
|
+
|
14
|
+
追記します。
|
15
|
+
> 終端文字がない場合、コンピュータはどうやって配列の終了を認識しているのでしょうか?
|
16
|
+
|
17
|
+
上に書いた通り、c[0] 〜 c[4] に終端文字 '\0' が無くても、続くメモリのどこかに '\0' は見つかります。即ち、終端文字はどこかに存在します。
|
18
|
+
そもそも、終端文字を見つけるのは「コンピュータ」ではありません。printf()という関数です。そして、printf("%s", 〜) は表示する文字列・配列の長さに関係なく動作する仕様です。大きさ5の配列 c[5] を渡しても1文字しか表示しない場合もあれば10文字でも20文字でも表示してしまうことがある、という事実を貴方は体験したのです。そして、それは間違いでも何でもない、仕様通りの動作をしているのです。
|