previous next Up Title Contents Index

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)); 

Tehtävä 13.121 liita_jono

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.


previous next Up Title Contents Index