Estoy haciendo lo mismo en ambos códigos.Diferencia entre la matriz de caracteres y el puntero
En el código 1: He utilizado un char *
y asignar el espacio usando malloc
en main
.
En el código 2: He utilizado una matriz char
para el mismo propósito. Pero, ¿por qué la salida es diferente?
Código 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
}
Código 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' tiene una copia poco profunda de' a.p'. – Chad
@Chad - Sí, me perdí la línea 'b = a', así que borré mi comentario. – birryree
@Chad-¿qué es esta copia superficial? –