ポインタが指す文字列リテラルの中身を書き換えてはいけない(処理系に依存する)。
とあったのですが、なぜダメなのでしょうか。
「ポインタは文字列リテラルを記憶している領域(の先頭アドレス)を指しているため,ポインタの指している内容を変更しようとすると予期せぬエラーが発生します」
という記事を見ましたが、ポインタptrに格納されているのはアドレスで、別にアドレスを変更するわけではなく、内容を変更するだけだから問題ないように思うのですが。
そもそも、文字列リテラルに限った話だと思うのですが、なぜそれに限ったことなのかもわかりません。
例えば
c
1int a = 178; 2int *ptr; 3ptr = &a; 4*ptr = 180; 5printf("%d", a); //180 6printf("%d", *ptr); //180
というようになると思いますが、これは正常に動作します。
なんのために文字列リテラルの中身を変更するとエラーが発生するようになっているのか、また何故文字列リテラルに限ったことなのか教えていただきたいです。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/09 07:50