3

このコードを検討してください。

int main()
{
    char *s, *t;

    s = malloc(4 * sizeof(char));
    strcpy(s, "foo");
    t = s;
    printf("%s %s\n", s, t);         // Output --> foo foo
    strcpy(s, "bar"); // s = "bar"
    printf("%s %s\n", s, t);         // Output --> bar bar
}

との 2 つの文字列がsありtます。最初に に設定s"foo"、次に をt指摘しsます。文字列を印刷すると、foo foo.

次に、にコピー"bar"sて再度印刷すると、bar bar.

tこの場合、値が変化するのはなぜですか? (なぜ変更したのかをコピー"bar"しました)。st


今、私がに変わるstrcpy(s, "bar")ときs = "bar"-

int main()
{
    char *s, *t;

    s = malloc(4 * sizeof(char));
    strcpy(s, "foo");
    t = s;
    printf("%s %s\n", s, t); // Output --> foo foo
    s = "bar"
    printf("%s %s\n", s, t); // Output --> bar foo
}

このコードは私foo fooに とbar foo.

この場合、なぜ変更されなかったのですか?

4

3 に答える 3

2
strcpy(s, "foo");

t = sfooが指すメモリ位置にコピーします。s現在、t両方sが同じ場所を指しているため、同じ出力

次に、 にコピーbarsます。との両方が同じ場所tを指しているためです。sしたがって、同じ出力が再び表示されます。


この行まではすべて同じです

s = "bar"

文字列定数を作成しますbar。そして、そのアドレスを に割り当てますs。それpointerは任意のメモリ位置を指すことができます。必ずしもオリジナルではありません。

今、

s最初に指しbartいた以前の場所を指しているため、出力

于 2013-05-20T14:27:14.607 に答える