1
void main()
{
    char s[100]="hello";
    char *t;

    t=(char*)malloc(100);
    strcpy(t,s);
}

または、次のように割り当てることもsできtますt=s;。代替手段を使用することの欠点は何ですか?

4

4 に答える 4

5

t = sのような単純な割り当てを使用する場合、実際には文字列をコピーしていません。2つの異なる名前を使用して同じ文字列を参照しています。

于 2010-12-08T17:42:19.413 に答える
1

t=sが指すメモリブロックに適用されるすべての変更を割り当てるtと、sそれがあなたの望むものではない可能性があります。

また、この投稿をご覧になることをお勧めします。

于 2010-12-08T17:41:08.653 に答える
1

変数の値は、t1つ以上の連続した の位置charです。を実行するt = sと、char の場所が にコピーs[0]されます (およびからt取得した の古い値が置き換えられます)。 そして今、まったく同じ文字を参照しています - 一方を変更すると、もう一方を介して表示されます。tmalloc()t[0]s[0]

を使用するstrcpy(t, s)と、実際の文字をある場所から別の場所にコピーすることになります。

前者は、同じ家に 2 つの番地を付けるようなものです。後者は、1 つの家のすべての家具の正確なレプリカを作成し、それを 2 番目の家に配置するようなものです。

于 2010-12-09T00:23:47.447 に答える
0

strcpy()関数は、ある文字列を別の文字列にコピーするために使用されますが、ここでそれを誤って使用しました。

t=s;

ポインター「t」は文字列「s」のベースアドレスを取得します。これがポインターの目的です。一方、strcpyは機能します。ポインターに文字列全体を格納します.

于 2010-12-09T10:11:24.550 に答える