重複の可能性:
Cのchars[]とchar*sの違いは何ですか?
int main()
{
char *t1 = "Hi hello";
char t2[] = " strcat";
printf("%s", strcat(t1, t2));
}
このプログラムを実行すると、セグメンテーション違反が発生します
int main()
{
char t1[] = "Hi hello";
char *t2 = " strcat";
printf("%s", strcat(t1, t2));
}
一方、次のプログラムを実行すると、正しく実行され、連結された文字列が表示されます。どうしてこんなことに ?
前もって感謝します :)
この質問の要約[解決済み]
この質問は非常に閉じています。要約を追加したかっただけです。私が理解したポイントは次のとおりです。この方法で宣言された変数の場合
char *t1 = "hi hello";
型修飾子constを必ず追加してください。デフォルトでは読み取り専用メモリです。いかなる場合でも、データを変更することはできません。例えば
t1[0] = "L";
許可されていません。この方法で宣言された変数は、私たちの管理下にはなく、プログラムの存続期間中は永久に残ります。その記憶を解放することすらできません。
char t1[10] = "hi hello";
このようにして、メモリをより適切に制御できます。アレイを変更することは許可されています。スコープがなくなると、割り当てられたメモリの割り当てが解除されます。
char t1[] = "hi hello"; char t2[8] = "hi hello";
2つの宣言t1とt2は非常によく似ており、8文字の位置が順番に割り当てられています。
私が理にかなっていることを願っています。そうでない場合は編集してください。:)