2016-07-14 6 views
-1

定数ストリングを宣言するにはどうすればよいですか?私はこの権利をやっている場合は、私は知りませんが、これはそれを行うための正しい方法だろう?:Cで定数文字列を宣言する方法とは何ですか?

const char my_string="Hello"; 
+0

このコード行をコンパイルすると、正しくないことがわかります。 –

+0

本当に、http://www.tutorialspcom.com/compile_c_online.php – Jay

+0

これは、[まともな入門Cの書籍]の最初の数章で説明されています(http://stackoverflow.com/questions/562303/the-決定的なCブックのガイドとリスト)。 –

答えて

1
const char my_string="Hello"; 

これは、"hello"のような文字列リテラルは、タイプchar[n]のある有効なC.ではありませんnot const char。正しい宣言は

const char my_string[] = "Hello"; 

また、ALLCAPSで定数を指定することをお勧めします。 Cプログラミング言語で

+0

C文字列リテラルは 'char []'型で、ポインタではなく 'const'ではありません。 (配列型の任意の式と同様に、ほとんどのコンテキストでは暗黙的にポインタに変換されます) –

+0

@KeithThompson fixed – stackptr

+1

通常、すべての大文字を使用する規約はマクロに適用されます。 'my_string'は宣言されたオブジェクトであり、マクロではなく、厳密には定数ではありません。 –

-1

constの意味は、それが他の、より-最近、言語であるよりも強力なずっとです。実際には、 という意味は全く同じではないと言えるでしょう。

http://www.geeksforgeeks.org/const-qualifier-in-c/ ... (強調と省略鉱山)を引用すると:

修飾子constは、その値はならないことを指定するには、任意の 変数の宣言に適用することができ変更された[...] の結果は実装定義(!)です。 をconstに変更しようとした場合です。

ここで注目すべき重要なことは、C(防衛で、1970年代からさかのぼり、)キーワードでconst修飾子である、ということです。ではない "コンパイル時定数!"

C言語では、constというキーワードを使用したときに他の言語で使用される動作に最も近いものとして、#define宣言が使用されています。

「なぜ&方法、C++のconst "宣言」の著者アンドリュー・ハードウィックは、率直に言って、CおよびC++言語の両方でこのキーワードの治療を議論、以下のウェブページを考えてみましょう:http://duramecho.com/ComputerInformation/WhyHowCppConst.html

コントラスト両方彼らは宣言(ない修飾子)であると考え、この単語の他言語治療にこれらの言語の、彼らは普遍全く異なる方法で扱います。それはプログラミングCで使用されている理由を尋ねると

方法1

const char my_string[] = "Hello"; 

方法2

const char *my_string="Hello"; 

- :ここ

+1

あなたは 'const'の意味について議論しますが、あなたは実際に質問に答えません。 'const'の意味を簡単に説明します:* read-only *を意味します。 –

+0

私には明らかなようです...もちろん、OPは "const ..."という言葉の意味を「他の言語の意味」と勘違いしているかもしれません。したがって、私の(長い風にされた)ポスト。 「あなたが絶対に正しい間に、キースは、「C」の文脈では、定期的にそれを使用する私たちの人々によく理解されています」*私は私たちの目の前に、ほとんどの*他の*言語で "と言いました。それは私の応答を導くという視点です –

+0

OPは"定数文字列 "を宣言する方法を尋ね、' * 'の追加で正しい例を示します。質問は100%明確ではありませんが、あなたが実際にそれに答えていないと確信しています。 –

0

が答えです答えはw値を同じままにしておき、値を上書きしないようにするには、変数を定数として宣言します。

+0

そして、ここで '* my_string'は定数データを指す定数でない変数なので、変数は*書き込みから保護されません。 –

関連する問題