長い間、文字列リテラルと文字列定数は同じものだと考えていました。
ところが・・・私の持っている本にこうあります。
C言語には、文字列定数という概念は存在しない。
文字列リテラルは、定数であるとは限らない。
ん?
書き換えができない=定数として考えると文字列リテラルも文字列定数も同じ意味ではないのでしょうか?
では、C++では文字列定数という概念は登場するんですか?
const char 型かな?
#include<stdio.h> int main() { char *name = "Technology"; *name = 'Z'; //(2) printf("%s\n", name); name = "y"; printf("%s\n", name); return 0; }
上記の(2)には問題があります。
静的記憶期間の文字列リテラルを書き換えています。
未定義動作になるとおもいます。
しかし改めて考えるとなぜ上書き行為は危険なのでしょうか?
文字列リテラルの書き換えが可能であると仮定してはいけない。
グローバル変数も同じく静的記憶期間です。
しかしグローバル変数はプログラムの中でよく書き換えたりしますよね?
グローバル変数はよくて、文字列になるとダメというのはどういう事でしょうか?
別に「静的記憶期間は上書きを禁止している領域」というわけではないですよね?
もしそうならグローバル変数は書き換え不可能になっていまします。
文字列リテラルが定数とは限らないからこそ上書きしてはいけないのですか?
文字列リテラルという用語の登場とともに、まったく使われなくなった用語が文字列定数
・・・だそうです。
用語の問題もまた歴史が絡んでいるのでしょうか?
どなたか教えてください。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/14 06:50
2017/06/14 07:00
2017/06/14 07:04
2017/06/15 01:22
2017/06/15 01:30
2017/06/15 01:42