previous next Up Title Contents Index

13.3.2 memmove

Mikäli kopioinnin kohde ja lähde ovat päällekäin, saattaa kopiointi tuottaa yllätyksiä. Jos jonot olisivat esimerkiksi seuraavasti
                           +-----jono2
jono1                      v
  |      0  1  2  3  4  5  0  1  2  3  4  5 
  |    +-----------------------------------+ 
  +--->|4B|69|73|73|61|00|6B|61|6E|61|00|??|
       +-----------------------------------+
        K  i  s  s  a  NULk  a  n  a  NUL    
ja tavoitteena olisi siirtää Kissa merkkijonoa 3 pykälää vasemmalle sekä muuttaa kana muotoon kkana, voitaisiin kuvitella tämän tapahtuvan
	strcpy(jono1,jono1+3);
	strcpy(jono2+1,jono2); 
Yleensä käyttöjärjestelmästä riippuen ainakin toinen edellisistä sekoaa. Ainoa turvallinen tapa tehdä em. temppuja on memmove, jonka taataan toimivan vaikka lähde ja kohde olisivat osittain päällekäinkin.
	memmove(jono1,jono1+3,strlen(jono1+3)+1);
	memmove(jono2+1,jono2,strlen(jono2)+1); 


previous next Up Title Contents Index