Problema ao tentar passar o valor de uma pilha para outra

Não estou conseguindo passar os valores da pilha1 para a pilha 2, quando tento eu pego o valor do topo da pilha 1, fiquei sem ideias.
segue o codigo

include <stdio.h>
include <stdlib.h>
define tam 3
struct pilha1
{
int topo;
int vetor[tam];
}p;
struct pilha2
{
int topo2;
int vetor2[tam];
}p2;
struct pilha3
{
int topo3;
int vetor3[tam];
}p3;
void inicar()
{
p.topo = -1;
p2.topo2 = -1;
p3.topo3 = -1;
}
void push()
{
int i = 0;
for(i = 0; i<tam; i++)
{
p.topo = p.topo+1;
printf(“digitie um valor \n”);
scanf("%d",& p.vetor[p.topo]);
printf(“PUSH = %d\n”, p.vetor[p.topo]);
system(“pause”);
system(“cls”);
}

}
//creio que o problema esteja aqui mas não sei como soluciona-lo
void passaP2()
{
int i =0;
for(i; i<tam ; i++)
{
p2.topo2 = p2.topo2+1;
p2.vetor2[p2.topo2] = p2.vetor2[p.topo];

}

}

void verificarP()
{
int i = 0;
for(i= 0; i<=p.topo; i++)
{
if(p.vetor[i]=="")
{
printf("");
}else
{
printf(“posicao[%d]: %d \n”,i,p.vetor[i]);
}
}
}
void verificarP2()
{
int i = 0;
for(i= 0; i<=p.topo; i++)
{
if(p2.vetor2[i]=="")
{
printf("");
}else
{
printf(“posicao2[%d]: %d \n”,i,p2.vetor2[i]);
}
}
}

int main()
{
inicar();
push();
verificarP();
passaP2();
verificarP2();

}

Mas a pilha funciona desse jeito, se você empilhar tudo na pilha 1 pra depois passar os valores para pilha 2, ela será a pilha 1 ao contrário, com oque tava no topo da P1 embaixo da P2 e o mesmo com oque estava no fundo.