Sto facendo la stessa cosa in entrambi i codici.Differenza tra array di caratteri e puntatore
Nel codice 1: ho utilizzato uno char *
e allocare lo spazio utilizzandoin main
.
Nel codice 2: Ho utilizzato un array char
per lo stesso scopo. Ma perché l'output è diverso?
Codice 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
}
Codice 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' è poco profondo copiato da' a.p'. – Chad
@Chad - Sì, ho perso la riga 'b = a', quindi ho cancellato il mio commento. – birryree
@Chad -che cos'è questa copia superficiale? –