En tu ejemplo, estas definiendo struct A dos veces, supongo que la segunda en realidad era struct B, ademas en la primer estructura A, pones dos miembros b, supongo tambien que debio ser miembro d el cuarto, pero bueno dices que lo escribiste a la rapida, sin embargo, te lo aclaro, no sea que te vayas con una idea errada si no esta bien definido.
Ahora, respondiendo a tu pregunta, suponiendo que defines tu estructura A, con sus miembros
exactamente del mismo tipo y en el mismo orden que estructura B, de la siguiente manera:
typedef struct A
{
int a;
float b, c;
int d;
};
typedef struct B
{
int a;
float b, c;
};
dire que SI, tu suposicion es correcta, el contenido de los miembros a, b y c se copiaran de B a A en el primer caso, y el contenido de a y b, en el segundo caso.
Pero cuidado aqui, usar memcpy puede ser peligroso a menos que sepas exactamente lo que estas haciendo, ya que no comprueba la variable destino, para verificar que sea del tamaño adecuado, ni tampoco que lo que estes haciendo sea lo correcto o este en el orden correcto.
Por ejemplo, supongamos que inviertes la definicion de los miembros, de la siguiente manera:
typedef struct A
{
int a;
float b, c;
int d;
};
typedef struct B
{
// invierto la definicion
float b, c;
int a;
};
Entonces en este caso, lo que sucederia es que el contenido de struct B float b, se guardaria en struct A int a, y el contenido de struct B float c se guardaria en struct A float b, ya que ambos tipos float e int, se almacenan en 4 bytes. Ocurriria algo mas grave si en lugar de float utilizaras double, ya que double ocupa 8 bytes, entonces no coincidiria el tamaño del tipo origen con el tipo destino, ¿te das cuenta a que me refiero?
Dicho eso, y como dije antes, solo ten cuidado al usar memcpy y asegurate de saber lo que haces.
Saludos