2010-07-24 4 views
15

Wenn ich zwei char-Arrays wie folgt:Verketten Sie zwei Char-Arrays?

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

Und ich will dann ein drittes machen, welche verkettet diese wie könnte ich es tun?

Ich habe versucht:

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

Aber das scheint nicht zu funktionieren. Es tut wenn one und two Setup wie diese sind:

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

Wer noch keine Idee, wie man das Problem lösen?

Danke

+1

Die erste sollte auch funktionieren, so lange verwenden können, wie Sie eine Zeichenfolge an den ersten Arrays zuweisen. Sie haben soeben angegeben, wie lange die Strings sein dürfen und keinen Wert zugewiesen bekommen. – Chris

+1

Sind das Char-Arrays oder sind sie Strings? Strings sind Char-Arrays mit einer speziellen Konvention, dass ''\ 0'' existieren muss und das Ende der Zeichenkette angibt. Um normale Nicht-String-Char-Arrays zu kopieren, verwenden Sie 'memmove'. –

+0

Und wenn Sie wirklich Saiten meinen, dann ist '399' genug für die Größe von' drei'. –

Antwort

7

Wenn ‚ein‘ und ‚zwei‘ kein ‚\ 0‘ beendet Zeichenfolge enthält, dann können Sie diese verwenden:

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

Dadurch werden alle Zeichen sowohl aus einer kopieren und zwei Zeichenfolge ohne Berücksichtigung endet char ‚\ 0‘

+0

Speicher? Sicher meinst du memcpy, ja? Macht nichts, ich repariere es selbst :-) – paxdiablo

+0

Sie enthalten Zeichen, sorry, ich hätte das erwähnen sollen. –

+0

@Pascal Cuoq: Definiert in string.h –

4

strcpy erwartet, dass die Arrays durch '\ 0' beendet werden. In C enden die Strings mit Null. Das ist der Grund, warum der zweite Ansatz funktioniert und der erste nicht.

+0

Ich würde lieber '\ 0' sagen oder liege ich falsch? Null ist nicht dasselbe wie Nullzeichen (NUL). –

+0

Ja, natürlich. Die Flucht ist irgendwo verloren gegangen :-) – EricSchaefer

0

Schnell 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

Das entspricht dem nicht arbeitenden 'strcpy' /' strcat'-Code von OP (außer es fügt auch ein Leerzeichen hinzu). Es beantwortet nichts. – melpomene

+0

@melpomene nein. das ist nicht gleichbedeutend. es setzt drei zu eins und zwei zusammen. und es funktioniert. Ich habe es oft benutzt und es hat mir Erfolg gebracht. seien Sie also nicht unhöflich und akzeptieren Sie, dass dies eine gut funktionierende Antwort ist! – OverloadedCore

+0

"* es setzt drei zu eins und zwei zusammen. Und es funktioniert. *" - Genau wie OP-Code. Wie ist es nicht äquivalent zu "strcpy (drei, eins); strcat (drei, zwei); '? – melpomene