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

回答編集履歴

1

追記

2017/01/17 08:07

投稿

PineMatsu
PineMatsu

スコア3581

answer CHANGED
@@ -18,4 +18,10 @@
18
18
  ```
19
19
  この場合のtはポインターです。なので、アドレスを書き換えることは出来ます。(constがついているので、アドレスが指し示す中身を書き換えることは出来ません。
20
20
  strcpy(t + 3, "eeee")は、コンパイラーによってはエラーにはなると思います。(ポインターtがconst char* なのでchar*に変換できないのでエラーになる。ただし、キャストすればその限りではなくなります)
21
- ただし、*tが5文字+NULLの領域しか確保されていないため、*(t+3)から4文字("eeee")を書いてしまうと、バッファオーバーランを引き起こしてしまうので、以降の動作がどうなるかは保証できません。(領域を越えてのアクセスなので例外が出たり暴走したり何か別のデータを書き換えてしまったりとかすると思います)
21
+ ただし、*tが5文字+NULLの領域しか確保されていないため、*(t+3)から4文字("eeee")を書いてしまうと、バッファオーバーランを引き起こしてしまうので、以降の動作がどうなるかは保証できません。(領域を越えてのアクセスなので例外が出たり暴走したり何か別のデータを書き換えてしまったりとかすると思います)
22
+
23
+ ポインター(アドレス)そのものも書き換えたくない場合は、
24
+ ```C
25
+ const char* const t = "HAPPY";
26
+ ```
27
+ になります。