3
#include<stdio.h>
#include<string.h>
struct node
{
    int a;
    char *p;
};
int main()
{
    struct node X,Y;
    char s[5] = "Adam";
    char t[5] = "Jack";
    X.a = 5;
    X.p = s;
    Y = X;
    Y.a = 10;
    strcpy(Y.p,t);
    printf("%d %s\n",X.a,X.p);
    printf("%d %s\n",Y.a,Y.p);
    return 0;
}

在这个问题中,结构 X 具有“a=5”和“P 指向亚当”。然后将其复制到另一个结构 Y。并对 Y 进行更改。但是当 strcpy(Yp,t) 完成时。

输出是:

5 Jack
10 Jack

这种变化应该只出现在 Y 中,但这些变化也反映在 X 中。怎么会这样?

我的问题是“在复制一个结构成员时,更改一个结构成员对另一个结构成员有何影响”?

4

3 回答 3

5
strcpy(Y.p,t);

Y.p值与 的值相同s。所以上面的函数调用其实是一样的:

strcpy(s, t);
于 2013-06-14T20:59:28.167 回答
5

您初始化YX. 这意味着它在该p字段中包含相同的指针 - 您从未更改过它。

当您执行 时strcpy,您正在编写tovertop of的内容s

你很幸运,你选择了两个 4 字母的名字......

于 2013-06-14T20:59:43.497 回答
4

这是因为结构 X 和 Y 的字符指针 p 都指向同一个内存位置

所以 strcpy 改变了 X 和 Y 的数据

于 2013-06-14T21:01:59.177 回答