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