2017-04-01 15 views
0

C++を初めて使用しています。C++、char *文字列の変更

#include <iostream> 

int main() 
{ 
    char* str = "Test"; 
    *str = 'S'; 
} 

疑問は、なぜ* STR = 'S' のプログラムをクラッシュさ: 私はプログラムを持っていますか? 私が知る限り、strは文字列(文字列)の最初の文字を指していなければならないので、理論的にはそれを変更できるはずです。 定義された定数値に対してメモリが読み取り専用であるためですか? gcc 5.3.0を使用しています。

+0

は「それですか? "ばっちり成功。 – user4581301

+0

char *をchar []に置き換えて変更できると思います。 –

+0

これはC++ 11以降は無効です。 – chris

答えて

3

なぜ* STR = 'S' は、プログラムをクラッシュ?あなたは文字列リテラルを変更することが許可されていないので

。 C++標準では、それらを読み取り専用メモリに格納することができます。

あなたはコンパイラの警告を有効にした場合、実際には、あなたが得る:文字列リテラルを指すとき

prog.cc:5:16: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] 
    char* str = "Test"; 
       ^~~~~~ 

は常にconst char*を使用します。メモリは読み取り専用であるため、定義された定数値のため

関連する問題