2010-07-24 11 views
15

Si tengo dos arrays de char de este modo:Concatenar dos matrices de caracteres?

char one[200]; 
char two[200]; 

Y luego quiero hacer una tercera, que concatena éstos cómo podría hacerlo?

que he intentado:

char three[400]; 
strcpy(three, one); 
strcat(three, two); 

pero esto no parece funcionar. Si lo hace one y two configuración como esta son:

char *one = "data"; 
char *two = "more data"; 

Alguien tiene alguna idea de cómo solucionar este problema?

Gracias

+1

El primero de ellos debería funcionar tan bien como siempre y cuando se asigna una cadena a las matrices primera. Usted acaba de especificar cuánto tiempo pueden ser las cadenas, no se le asignó ningún valor. – Chris

+1

¿Son matrices de caracteres o son cadenas? Las cadenas son matrices de caracteres con una convención especial que ''\ 0'' debe existir e indica el final de la cadena. Para copiar arreglos de caracteres comunes que no sean cadenas, use 'memmove'. –

+0

Y, por cierto, si realmente quieres decir cadenas, entonces '399' es suficiente para el tamaño de' tres'. –

Respuesta

7

Si 'uno' y 'dos' no contiene una '\ 0' cadena terminada, entonces usted puede utilizar esto:

memcpy(tree, one, 200); 
memcpy(&tree[200], two, 200); 

Esto copiará todos los caracteres a partir de uno y dos sin tener en cuenta char string terminación '\ 0'

+0

memoria? Seguramente te refieres a memcpy, ¿sí? No importa, lo arreglaré yo mismo :-) – paxdiablo

+0

Contienen personajes, lo siento, debería haberlo mencionado. –

+0

@Pascal Cuoq: Definido en string.h –

4

strcpy espera que las matrices para ser terminados por '\ 0'. Las cadenas terminan por cero en C. Es por eso que el segundo enfoque funciona y el primero no.

+0

Prefiero decir '\ 0' o estoy equivocado? Cero no es lo mismo que carácter nulo (NUL). –

+0

Sí, por supuesto. El escape se perdió en alguna parte :-) – EricSchaefer

0

puede utilizar simplemente sprintf

char one[200] = "data"; // first bit of data 
char two[200] = "more data"; // second bit of data 
char three[400]; // gets set in next line 
sprintf(three, "%s %s", one, two); // this stores data 
+0

Eso es equivalente al código 'strcpy' /' strcat' que no funciona de OP (excepto que también agrega un espacio). No responde nada. – melpomene

+0

@melpomene nope. no es equivalente a eso. establece tres a uno y dos se unen. y funciona. Lo he usado muchas veces y me ha traído éxito. ¡así que no seas grosero y acepta que esa es una buena respuesta! – OverloadedCore

+0

"* establece tres a uno y dos se unen. Y funciona. *" - Al igual que el código de OP. ¿Cómo no es equivalente a 'strcpy (tres, uno); strcat (tres, dos); '? – melpomene