2016-03-24 11 views
-4

私がchar *c ="Hello";と宣言したときに知っていることは、この文字列を変更できないことを意味します。しかし、どのように私はそれを修正しようとするために私にエラーを与えるべきではありません Cの文字列の変更

char *p [] = {"Hello","World"}; 
*p = "Mode"; 

C.

内の文字列のこの配列を変更することができた来ますか?

+0

文字列の概念を理解することは、この回答を見てください。 http://stackoverflow.com/a/1011545/2555668 –

+1

@irqedこれはその質問の複製ではありません。 –

+0

関連:http://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s-and-char-s-in-c – Lundin

答えて

6

あなたはどこでも文字列(リテラル)を変更していません。

char *p [] = {"Hello","World"}; 
ここで p is an array (size 2) of pointer-to-char。それは変数ですが、それについての読み取り専用はありません。現在指している文字列は読み取り専用です。
*p = "Mode"; 

単純に、その配列の最初の要素を異なる(読み取り専用の)文字列を指すように変更しています。これは同じです:

p[0] = "Mode"; 
0

pはpointers.Theseポインタの配列であるしかし、それらのターゲット(彼らが指すものは)ありませんが、変更可能です。

*pは、配列内の最初のポインタであるp[0]に相当します。

*p = "Mode"ポインタp[0]の値を変更し、文字列リテラル"hello"を変更しないでください。

+0

この回答は私の答えが何も追加していないことを私は見ていません。 –