Hola,
Estoy haciendo una función en C++ para concatenar una cadena con otra con memoria dinámica, el problema es que me da error
Código:
char* strcatnredim(char *a, char *b, int n)
{
char *paux=NULL, *ptmp=NULL;
paux=new char[!n?strlen(b):n+1]; *paux='\x0'; // Reserva memoria la cadena a sustituir
if(n) strncat(paux,b,n); else strcpy(paux,b); // Copia la cadena
ptmp=new char[a?strlen(a):0+strlen(paux)+1]; *ptmp='\x0'; // Reserva memoria para la nueva cadena
if(a) strcpy(ptmp,a); strcat(ptmp,paux); // Copia la cadena resultante
if(a) delete [] a;
delete [] paux;
return ptmp;
}
Según he leido strcat hace una copia de la segunda cadena y la une a la primera. ¿o no es así? sino no daría error al liverra memoria.
¿Como puedo solucionarlo?
¿Como podría guardar el resultado directamente en a? si hago a=ptmp no se guarda al salir de la función.
Muchas gracias