2010-07-24 11 views
15

Se ho due array char in questo modo:Concatena due array di caratteri?

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

E poi voglio fare un terzo che concatena questi come potrei farlo?

ho provato:

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

ma questo non sembra funzionare. Lo fa se one e two sono configurazione come questa:

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

Qualcuno ha qualche idea di come risolvere questo problema?

Grazie

+1

Il primo dovrebbe funzionare così come fino a quando si assegna una stringa per le matrici prima. Hai appena specificato per quanto tempo possono essere le stringhe, non assegnato alcun valore. – Chris

+1

Sono array di caratteri, o sono stringhe? Le stringhe sono array di vettori con una convenzione speciale che deve essere ''\ 0'' e indica la fine della stringa. Per copiare ordinari array di caratteri non stringa, utilizzare 'memmove'. –

+0

E a proposito, se intendi veramente stringhe, allora '399' è sufficiente per la dimensione di' tre'. –

risposta

7

Se 'uno' e 'due' non contiene un '\ 0' stringa che termina, quindi è possibile utilizzare questo:

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

Questo copierà tutti i caratteri sia da uno e due trascurando stringa char di terminazione '\ 0'

+0

memoria? Sicuramente vuoi dire memcpy, si? Non importa, lo aggiusterò io stesso :-) – paxdiablo

+0

Contengono caratteri scusanti, avrei dovuto dirlo. –

+0

@Pascal Cuoq: definito in stringa.h –

4

strcpy aspetta che le matrici siano terminati da '\ 0'. Le stringhe sono terminate da zero in C. Ecco perché il secondo approccio funziona e prima no.

+0

Preferisco dire "\ 0" o sbaglio? Zero non è uguale a null character (NUL). –

+0

Sì, naturalmente. La fuga si è persa da qualche parte :-) – EricSchaefer

0

si può facilmente utilizzare 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

Questo è equivalente al codice 'strcpy' /' strcat' non funzionante dell'OP (eccetto che aggiunge anche uno spazio). Non risponde a nulla. – melpomene

+0

@melpomene no. non è equivoco a quello. imposta tre a uno e due uniti. e funziona. L'ho usato molte volte e mi ha portato successo. quindi non essere scortese e accetta che sia una buona risposta operativa! – OverloadedCore

+0

"* imposta tre a uno e due uniti insieme e funziona. *" - Proprio come il codice OP. Com'è non equivalente a 'strcpy (tre, uno); strcat (tre, due); '? – melpomene