- ベストアンサー
char *の書き換え
#include <iostream.h> int main(){ char *p = "abcdef"; p[3] = 'g'; cout << p[3]; return 0; } C++です。 p[3] = 'g'; は、やってはいけないことですか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「やってはいけない」というよりは「推奨されない」、「やらない方がよい」、「注意してやるべき」というところでえしょう。 「この程度のプログラム」で「実行環境がパーソナルコンピュータ」であれば(たぶん)問題なく動作するでしょう。 しかし、「もう少し大規模なプログラム」または「パーソナルコンピュータで無い環境」だと不具合を起こす可能性があります。 つまり、プログラムの構成と実行環境に依存します。 char *f1 = "file1.dat" ; char *f2 = "file1,dat" ; f1[4] = '2' ; このとき、f2も"file2.dat"を指す可能性があります。 (つまり、f1とf2が同じ領域を参照する) また、ROMをサポートしたコンパイラでは定数をROMに配置することができるものがあります。 その場合、ROMに配置された定数を書き換えると実行時エラーが起きます。 環境とコンパイラ(最適化)の挙動が把握できていて、定数を書き換えることで発生する状態を「それでよい」とする仕様ならば"やってよい”ことになります。
お礼
定数がROMに配置された場合は、ポインタを書き換えると エラーが発生するということだったんですね。 ROMというのが何なのか分からないけど、分からないからこそ ポインタの書き換えはしない方がいいということが分かりました。