2010-07-24 36 views
15

Öyle gibi iki karakter dizileri varsa:İki char diziyi birleştirir?

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

Ve daha sonra bu bunu nasıl yapabildiğimi birleştirir hangi üçüncü kazanmak ister misin?

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

Ama bu işe görünmüyor:

denedim.

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

Herkes bunu düzeltmek için bir fikrin var: one ve two böyle ayarlanmıştır varsa gelir?

sayesinde

+1

kullanabilirsiniz. Dizelerin ne kadar uzun olabileceğini belirlediniz, herhangi bir değer atanmadı. – Chris

+1

Onlar char dizileri mi yoksa dizeleri mi? Dizeler, özel bir kurala sahip olan ve "\ 0" ifadesinin bulunması gereken ve dizenin sonunu belirten karakter dizileridir. Normal olmayan dizili char dizileri kopyalamak için 'memmove' kullanın. –

+0

Ve bu arada, eğer gerçekten dizgiler demek istiyorsan, o zaman '399'' üç'ün boyutu için yeterlidir. –

cevap

7

, o zaman bu kullanabilirsiniz:

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

Bu dize sonlandırma kömürü hiçe hem bir ve iki tüm karakter kopyalar ilk diziler için bir dize atamak olarak '\ 0'

+0

bellek? Elbette memcpy demek istiyorsun, evet? Asla boşver, ben kendim halledeceğim :-) – paxdiablo

+0

Karakterler içerdiğinden özür dilerim ki bundan bahsetmeliydim. –

+0

@Pascal Cuoq: string.h içerisinde tanımlıyor –

4

strcpy'nin dizileri '\ 0' ile sonlandırılabilir beklemektedir. Dizeler C cinsinden sıfır ile sonlandırılır. Bu sebepten dolayı ikinci yaklaşım işe yarar ve olmaz. 'Tek' ve 'iki' bir '\ 0' sonlandırıldı dize içermiyorsa

+0

"\ 0" demeyi mi yoksa yanlış mıyım? Sıfır, boş karakterle aynı değil (NUL). –

+0

Evet, tabi ki. Kaçış bir yerde kayboldu :-) – EricSchaefer

0

kolayca ilki yanı sıra uzun çalışması gerektiğini sprintf'i

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

Bu, OP'nin çalışmayan 'strcpy' /' strcat' koduna eşdeğerdir (ayrıca bir boşluk ekler). Hiçbir şeye cevap vermiyor. – melpomene

+0

@melpomene nope. Buna eşit değil. Üç ile bire bir araya gelir. ve çalışıyor. Birçok kez kullandım ve bana başarı getirdi. Bu yüzden bu konuda kaba olmayın ve bu iyi bir cevap olduğunu kabul edin! – OverloadedCore

+0

"* üç ile bire bir birleştirir ve birlikte çalışır. *" - OP'nin kodu gibi. Strcpy (üç, bir) ile eşdeğer değildir; strcat (üç, iki); '? – melpomene

İlgili konular