Lo que haces es valido siempre y cuando ambos fueran arrays de tamaño definido, sin embargo solo uno de ellos lo es, y el otro es un apuntador a un dato tipo char, por lo cual no puedes determinar el largo de la cadena... soluciones:
1-La de aprender:
inicializa las variableas SIEMPRE, es una buena pratica.
#include<string.h>.
.
.
char *s2 =NULL;//es un apuntador sin direccion, es decir null
int tam=0,i=0;
T_CADENA s1;
for(i=0;i<MAXCAD;i++)
s1=' ';
i=0;
s2="hola ";/*com truco al final de la cadena
agregamos el caracter null paa indicar
que hasta alli llego*/
while(s2[i]!=NULL)//miramos el tamaño
{
tam++;
i++;
}
for(i=o;i<tam;i++)//copiamos
s1[i]=s2[i]
2-La forma practica resulta que la libreria string trae algunas funciones que nos pueden ayudar, asi que al inicio del programa deberas incluir el encabezado string.h
#include<string.h>.
.
.
char *s2 =NULL;//es un apuntador sin direccion, es decir null
int tam=0,i=0;
T_CADENA s1;
memset(s1,' ',MAXCAD);//ESTA NO ES DE STRING.H
s2="hola ";/*como truco al final de la cadena
agregamos el caracter null para indicar
que hasta alli llego
normalmente se supone que en el
sistema la cadena termina automaticamente con NULL
pero no siempre estop es asi*/
strcpy(s1,s2);//copiamos la cadena
con respecto a esto:
void Charptr_TCadena(TCadena & s1,char *s2)
no es necesario el & , menos al recibir el parametro, esto les puede ocacionar errores, ya que s1 es un arreglo, es decir ya de por si es un apuntador a nua direccion de memoria.
tam=strlen(S2);//esto es mejor poara saber el tamaño
Suerte.
Juank