ポインター文字列を使用すると、他の文字に初期化できますが、一度文字列を定義すると、他の文字に初期化することはできません。その理由は何ですか??
int main()
{
char str1[]="hello";
char *p="hello";
str1="bye";/*error*/
p="bye";/*works*/
}
ポインター文字列を使用すると、他の文字に初期化できますが、一度文字列を定義すると、他の文字に初期化することはできません。その理由は何ですか??
int main()
{
char str1[]="hello";
char *p="hello";
str1="bye";/*error*/
p="bye";/*works*/
}
配列として定義str1
しましたが、配列は代入できません。
ただし、他のデータを配列にコピーすることはできます。次に例を示します。
char str1[] = "hello";
strcpy(str1, "bye");
あなたがしていることなどの配列内の文字を変更するには、次のような関数を使用するstrcpy
か、インデックスごとにインデックスを作成する必要があります。
str1[0] = 'p';
印刷しますpello
あなたがやろうとしていることは、C 言語ではサポートされていません。
配列は配列であり、ポインターはポインターです。配列を定義すると、割り当てられた配列へのポインターが与えられます。これは、配列スペースが予約されている場所への定数ポインターです。これは、lifo スタック内の具体的なアドレスです。したがって、str1 は定数ポインター値であり、変更することはできません。別の定数文字列のアドレスの値を設定することはできません。
ポインターを char*p として定義すると、アドレスの変数値が得られます。したがって、変数 p の値を変更できます。