2010-07-24 10 views
15

Jeśli mam dwie tablice char tak:Skonsumuj dwa tablice znaków?

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

I wtedy chcą, aby jedna trzecia, która skleja to w jaki sposób mogę to zrobić?

Próbowałem:

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

Ale to nie wydają się działać. Czyni jeśli one i two są ustawione tak:

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

Ktoś ma jakiś pomysł jak to naprawić?

Dzięki

+1

pierwsza z nich powinna działać jak dobrze tak długo, jak przypisać ciąg do tablic pierwszy. Właśnie określiłeś, jak długie mogą być ciągi, nie przypisano żadnej wartości. – Chris

+1

Czy są to tablice znakowe, czy są one strunami? Ciągi są tablicami znaków ze specjalną konwencją, która musi zawierać '\ 0'' i wskazuje koniec ciągu znaków. Aby skopiować zwykłe tablice znaków inne niż łańcuchowe, użyj 'memmove'. –

+0

A tak przy okazji, jeśli naprawdę myślisz o ciągach, to '399' jest wystarczające dla rozmiaru' trzech'. –

Odpowiedz

7

Jeśli „jeden” i „dwa” nie zawierają „\ 0” zakończony ciąg, a następnie można użyć to:

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

to skopiuje wszystkie znaki zarówno z jednym i dwoma pomijając ciąg kończącą char „\ 0”

+0

Pamięć? Na pewno masz na myśli memfpy, tak? Nieważne, sam to naprawię :-) – paxdiablo

+0

Zawierają one znaki przykro, że powinienem o tym wspomnieć. –

+0

@Pascal Cuoq: Zdefiniowany w string.h –

4

strcpy spodziewa tablice mają być zakończone przez '\ 0'. Łańcuchy kończą się na zero w C. To dlatego drugie podejście działa, a pierwsze nie.

+0

Powiedziałbym raczej "\ 0" lub czy się mylę? Zero to nie to samo, co znak null (NUL). –

+0

Tak, oczywiście. Ucieczka zgubiła się gdzieś :-) – EricSchaefer

0

można łatwo używać 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

Jest to odpowiednik niepracującego kodu OP "strcpy' /' strcat' (oprócz tego, że dodaje on również spację). Nic nie odpowiada. – melpomene

+0

@melpomene nope. nie jest to równoważne. ustawia trzy do jednego i dwa połączone ze sobą. i to działa. Używałem go wiele razy i przyniosło mi to sukces. więc nie bądź nieuprzejmy i zaakceptuj, że to dobrze działająca odpowiedź! – OverloadedCore

+0

"* ustawia trzy do jednego i dwa połączone razem i działa. *" - Tak jak kod OP. Jak to nie jest równoznaczne z 'strcpy (trzy, jeden); strcat (trzy, dwa); '? – melpomene

Powiązane problemy