Foros del Web » Programación para mayores de 30 ;) » Programación General »

Concatenar cadenas de caracteres en C

Estas en el tema de Concatenar cadenas de caracteres en C en el foro de Programación General en Foros del Web. A ver. Estoy intentando crear 3 cadenas de carácteres a partir de una que ya tengo, pero no consigo lo que quiero. La idea es ...
  #1 (permalink)  
Antiguo 06/06/2005, 10:58
 
Fecha de Ingreso: diciembre-2004
Mensajes: 32
Antigüedad: 19 años, 4 meses
Puntos: 0
Concatenar cadenas de caracteres en C

A ver. Estoy intentando crear 3 cadenas de carácteres a partir de una que ya tengo, pero no consigo lo que quiero. La idea es que tengo un nombre de un fichero, i quiero crear 3 nombres distintos a partir del original, añadiendo una extensión distinta para cada uno. El código es:

void func(char *f_in){
char *f1, *f2, *f3;

f1 = strcat(f_in, ".trees");
f2 = strcat(f_in, ".Parameters");
f3 = strcat(f_in, ".Schedule");
}

Y el resultado es que tanto f1, f2 como f3 contienen lo mismo, que es <f_in>.trees.Parameters.Schedule. Lo que veo es que como está declarado como char*, al final todo apunta a la misma cadena de caracteres, que es todo junto. Per mi intención es la siguiente:
f1: <f_in>.trees
f2: <f_in>.Parameters
f3: <f_in>.Schedule
Como lo puedo hacer? Gracias
  #2 (permalink)  
Antiguo 06/06/2005, 11:20
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
El problema es que strcat encadena la cadena del puntero del segundo parámetro a la cadena que apunta el primer parámtro, y devuelve también éste. Lo que tienes que hacer es primero obtener el tamaño total que te ocupará toda la cadena para las tres posibilidades, después conseguir memoria con malloc, copiar f_in a todas ellas y por último encadenar la cadena a éstas. El último detalle es que tus f1, f2 y f3 son locales, no consigues nada con ello.

Después devolverlos con una estructura o pasando éstos en los argumentos con un puntero a puntero char (char ** f1).

Si no quieres usar memoria dinámica, te queda la opción de pasar punteros en los argumentos a memoria ya asignada como los arrays.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:04.