13.3.3 strcat ja strncat
Merkkijonojen
liittämiseen on funktiot strcat ja strncat. Esimerkiksi:
char jono1[10],jono2[6];
...
strcpy(jono1,"Kissa");
strcpy(jono2," on!");
+-----jono2
jono1 v
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
| +-----------------------------------------------+
+--->|4B|69|73|73|61|00|??|??|??|??|20|6F|6E|21|00|??|
+-----------------------------------------------+
K i s s a NUL o n ! NUL
strcat(jono1,jono2);
+-----jono2
jono1 v
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
| +-----------------------------------------------+
+--->|4B|69|73|73|61|20|6F|6E|21|00|20|6F|6E|21|00|??|
+-----------------------------------------------+
K i s s a o n ! NUL o n ! NUL
Funktiossa strcat on sama vaara kuin strcpyssäkin.
Vaaraa voidaan osittain välttää strncat kutsulla,
muistaen kuitenkin, että pituutena annetaan lisättävien merkkien
maksimimäärä (NUL mukaanlukien, joka strncatin
tapauksessa laitetaan), EI tuloksen maksimikoko. Siis turvallinen muoto olisi:
strncat(jono1,jono2,10- (strlen(jono1)+1));
- Kirjoita aliohjelma
- int liita_jono(char *tulos, int max_koko, const char *jono)
- joka liittää merkkijonon jono jonon
tulos perään, muttei ylitä tulos- jonon
maksimipituutta max_pit. tulos- jono loppuu aina NUL-
merkkiin. Funktio palauttaa 0 mikäli liittäminen onnistuu
täysin ja muuten jonkin muun arvon.