Tôi đang làm điều tương tự trong cả hai mã.Sự khác biệt giữa mảng ký tự và con trỏ
Trong mã 1: Tôi đã sử dụng char *
và phân bổ không gian bằng cách sử dụng malloc
trong main
.
Trong mã 2: Tôi đã sử dụng một mảng char
cho cùng một mục đích. Nhưng tại sao đầu ra lại khác?
Mã 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
}
Mã 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' được sao chép từ' a.p'. – Chad
@Chad - Vâng tôi đã bỏ lỡ dòng 'b = a', vì vậy tôi đã xóa nhận xét của mình. – birryree
@Chad-bản sao nông này là gì? –