void main()
{
char s[100]="hello";
char *t;
t=(char*)malloc(100);
strcpy(t,s);
}
または、次のように割り当てることもs
できt
ますt=s;
。代替手段を使用することの欠点は何ですか?
t = sのような単純な割り当てを使用する場合、実際には文字列をコピーしていません。2つの異なる名前を使用して同じ文字列を参照しています。
t=s
が指すメモリブロックに適用されるすべての変更を割り当てるt
と、s
それがあなたの望むものではない可能性があります。
また、この投稿をご覧になることをお勧めします。
変数の値は、t
1つ以上の連続した の位置char
です。を実行するt = s
と、char の場所が にコピーs[0]
されます (およびからt
取得した の古い値が置き換えられます)。 そして今、まったく同じ文字を参照しています - 一方を変更すると、もう一方を介して表示されます。t
malloc()
t[0]
s[0]
を使用するstrcpy(t, s)
と、実際の文字をある場所から別の場所にコピーすることになります。
前者は、同じ家に 2 つの番地を付けるようなものです。後者は、1 つの家のすべての家具の正確なレプリカを作成し、それを 2 番目の家に配置するようなものです。
strcpy()
関数は、ある文字列を別の文字列にコピーするために使用されますが、ここでそれを誤って使用しました。
t=s;
ポインター「t」は文字列「s」のベースアドレスを取得します。これがポインターの目的です。一方、strcpyは機能します。ポインターに文字列全体を格納します。.