Portál AbcLinuxu, 16. července 2025 14:57


Dotaz: Sloučení char

13.8.2012 11:44 kb
Sloučení char
Přečteno: 475×
Odpovědět | Admin
Zdravím, mám dvě proměnné char a potřeboval bych je sloučit do jednoho char, nevíte někdo jak na to? Zkoušel jsem:
char a[25]="Dobrý";
char b[25]=" den";
char ab[25]= a || b;
a píše to chybu: neco.cpp:82:36: error: array must be initialized with a brace-enclosed initializer

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

DaBler avatar 13.8.2012 12:35 DaBler | skóre: 17 | blog: dabler | Brno
Rozbalit Rozbalit vše Re: Sloučení char
Odpovědět | | Sbalit | Link | Blokovat | Admin
Funkcemi strcpy a strcat.
Josef Kufner avatar 13.8.2012 13:11 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Sloučení char
Raději strncpy, aby mu nepřetekl buffer.
Hello world ! Segmentation fault (core dumped)
15.8.2012 00:34 chrono
Rozbalit Rozbalit vše Re: Sloučení char
V takom prípade bude zase riskovať, že sa mu tam nezmestí '\0' (a reťazec bude teda neukončený).
14.8.2012 23:34 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Sloučení char
Já mám nejraději funkci sprintf či snprintf, která ten strcat v pohodě nahradí a je univerzálnější. Další využití je třeba převedení čísla na řetězec a různé další formátovací kouzla. Prostě je to printf, co výsledek uloží do proměnné (obšírně to rozepisuji samozřejmě pro autora dotazu). Tady by to vypadalo takto:
char a[]="Dobrý";
char b[]=" den";
char ab[25];

snprintf(ab, 25, "%s%s", a, b);
A třeba to převedení čísla na řetězec:
snprintf(buf, 100, "Číslo má hodnotu %i", 1000);
Baník pyčo!
Michy avatar 14.8.2012 11:11 Michy | skóre: 11 | Praha
Rozbalit Rozbalit vše Re: Sloučení char
Odpovědět | | Sbalit | Link | Blokovat | Admin
Proměnné nejsou typu char, ale char[25]. Pokud se jedná o statickou inicializaci, řešil bych to s použitím maker, asi nějak takhle:
#define CHAR_A "Dobrý"
#define CHAR_B " den"
#define CHAR_AB CHAR_A CHAR_B

char a[25] = CHAR_A;
char b[25] = CHAR_B;
char ab[25] = CHAR_AB;
Josef Kufner avatar 14.8.2012 23:00 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Sloučení char
Pochybuju, že by šlo o statickou inicializaci a daleko lepší je napsat:
char *a = "Dobrý";
char *b = " den";
char *c;

c = malloc(strlen(a) + strlen(b) + 1);
strcpy(c, a);
strcat(c, b);
// ...
free(c);
Hello world ! Segmentation fault (core dumped)
14.8.2012 23:41 l4m4
Rozbalit Rozbalit vše Re: Sloučení char
const char a[] = "....";
a
const char *a = "....";
není ekvivalentní, viz např. dsohowto (používání bez const je pak vůbec zajímavé, a byť někdy užitečné, obecně ho nelze doporučit, pokud přesně nevíte proč a jak). Také by pole znaků narozdíl od pointerů umožnily použít sizeof() namísto strlen(), i když optimalizující kompilátor bude schopen vyhodnotit i ten strlen() staticky.

Především ale proboha použij nějakou knihovnu pro práci s řetezci, která má alespoň něco jako g_strconcat() z GLib (příklad implementace takové funkce je jako concat() i přímo v manuálu glibc). Nebo string v C++ -- těžko řící, v jakém to mělo být jazyce, ale koncovka souboru je .cpp, takže by to snad mohlo být C++.
14.8.2012 23:55 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Sloučení char
Tak není špatné se ty základy naučit, s funkcemi sprintf, sscanf, strstr, strcpy, strlen a hlavně pochopením, jak je v C řetězec reprezentován (pole znaků ukončené zarážkou) se dá udělat hodně (a když už žádná funkce nepomůže, pořád máme cyklus a něco na způsob stavového automatu). Ale samozřejmě, když už člověk princip pochopí, nikdo mu v ulehčení si práce knihovnou či std::stringem nebrání :-). Ale zas používat knihovnu a představovat si, jakou magii vykonovává taky není dobré, obzvlášť v C (u skriptovacích jazyků je to jiná - tam interpret přístup mimo paměť a leaky většinou ošetří).
Baník pyčo!
15.8.2012 08:52 l4m4
Rozbalit Rozbalit vše Re: Sloučení char
Ano, na jedné straně by si někdo, kdo nemá jasno v tom, co to znamená string v C (což je zjevné z dotazu), v tom měl udělat jasno.

Ale na druhé straně při kreativním lepení hromady strcat() a spol. do nějaké high-level operace udělá vcelku snadno botu i zkušený programátor. U začátečníka je to téměř jisté.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.