Paso de \'char *\' entre funciones

donatoll
16 de Diciembre del 2008
Hola gente!

Me he creado esta funcion:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------
#define DELIMITADOR ":"

char *CR_to_char(const CLIENT_REQUEST request, char *buf)
{
int i, new_len;
// Concatenaremos en una cadena temporal
char cad_tmp[101];

// Le concatenamos al principio el tipo de funcion
// Le concatenamos tambien 'nº de parametros long' y 'nº de parametros char *'
sprintf(cad_tmp, "%d%s%d%s%d", request.function_type, DELIMITADOR, request.lparams, DELIMITADOR, request.sparams);

// Seteamos 'buf' segun la longitud de 'cad_tmp'
buf = (char *)realloc(buf, sizeof(char)*(strlen(cad_tmp)+1));
strncpy(buf, cad_tmp, strlen(cad_tmp));
buf[strlen(cad_tmp)]=''; // Nos aseguramos de cerrar la cadena

// Le vamos concatenando los valores de los posibles parametros (long)
for (i=0; i<request.lparams; i++)
{
sprintf(cad_tmp, "%s%.10ld", DELIMITADOR, request.lparam[i]);
// Ampliaremos 'buf' segun la longitud de 'cad_tmp'
new_len = strlen(cad_tmp)+strlen(buf)+1;
buf = (char *)realloc(buf, sizeof(char)*new_len);
sprintf(buf, "%s%s", buf, cad_tmp);
buf[new_len-1]=''; // Nos aseguramos de cerrar la cadena
}

// Le vamos concatenando los valores de los posibles parametros (char *)
for (i=0; i<request.sparams; i++)
{
sprintf(cad_tmp, "%s%.4s", DELIMITADOR, request.sparam[i]);
// Ampliaremos 'buf' segun la longitud de 'cad_tmp'
new_len = strlen(cad_tmp)+strlen(buf)+1;
buf = (char *)realloc(buf, sizeof(char)*new_len);
strncat(buf, cad_tmp, strlen(cad_tmp));
buf[new_len-1]=''; // Nos aseguramos de cerrar la cadena
}


// Devolvemos la cadena
printf("[CR_to_char()] Devolviendo [%d][%s]...n", strlen(buf), buf);
return buf;
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Y la llamo asi:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------
int main(int argc, char *argv[])
{
char *cad;
cad = (char *)malloc(sizeof(char));

// Estructura para trabajar con funciones
CLIENT_REQUEST cli_request;

// Rellenamos la estructura
cli_request.function_type=1;
cli_request.lparams=1;
cli_request.lparam[0]=150000;
cli_request.sparams=0;

// Pasamos la estructura a 'char *'
SAPT_scr_to_char(cli_request, cad);

printf("CAD es [%s]n", cad);
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------


El problema esta al modificar el 'char *' que paso como parametro dentro de la funcion.
¿Que es lo que hago mal con los realloc()?


La info que se me muestra es:
[CR_to_char()] Devolviendo [16][1:1:0:0000153153]...
CAD es [1:1:0]


Cuenado deberia ser:
[CR_to_char()] Devolviendo [16][1:1:0:0000153153]...
CAD es [1:1:0:0000153153]


Alguna opinion?

Gracias!