私は両方のコードで同じことをやっています。文字配列とポインタの違い
コード1:char *
を使用し、malloc
を使用してmain
にスペースを割り当てました。
コード2では、同じ目的でchar
アレイを使用しました。しかし、なぜ出力が異なるのですか?
コード1:
struct node2
{
int data;
char p[10];
}a,b;
main()
{
a.data = 1;
strcpy(a.p,"stack");
b = a;
printf("%d %s\n",b.data,b.p); // output 1 stack
strcpy(b.p,"overflow");
printf("%d %s\n",b.data,b.p); // output 1 overflow
printf("%d %s\n",a.data,a.p); // output 1 stack
}
コード2:第2の例では
struct node1
{
int data;
char *p;
}a,b;
main()
{
a.data = 1;
a.p = malloc(100);
strcpy(a.p,"stack");
b = a;
printf("%d %s\n",b.data,b.p); //output 1 stack
strcpy(b.p,"overflow");
printf("%d %s\n",b.data,b.p); // output 1 overflow
printf("%d %s\n",a.data,a.p); // output 1 overflow(why not same as previous one?)
}
@birryree 'b.p'は' a.p'から浅くコピーされています。 – Chad
@Chad - うん、私は 'b = a'行を見逃していたので、コメントを削除しました。 – birryree
@Chad - この浅いコピーは何ですか? –