4 svar
84 visningar
erze7811 102
Postad: 30 dec 2022 20:49 Redigerad: 30 dec 2022 20:52

memcpy

Jag skriver ett bilregister i C och har gjort en funktion som tar bort en bil från register.

Jag fick hjälp av läraren med memcpy raden men förstår inte hur den fungerar, jag skulle behöva hjälp med att förstå hur den fungerar. Kollade på fuktionen och såg att första argumentet i funktionen är destinationen och andra är source, men den tredje med size of hänger jag inte riktigt med på. I argument 1 och 2 blir det att en bil överskrids eller hur tas bilen bort? Tack på förhand!

Laguna Online 30472
Postad: 30 dec 2022 21:12

De bilar som har högre index än den du vill ta bort flyttas ett steg mot mindre index, så att bilen du vill ta bort skrivs över.

Före bilen som ska tas bort finns det lika många bilar som den bilens index. De som ska flyttas är alltså totala antalet - index - 1.

Var det det du undrade över?


Tillägg: 30 dec 2022 21:15

Man ska dock inte använda memcpy om source och destination överlappar varandra. Använd memmove i stället.

 

erze7811 102
Postad: 30 dec 2022 21:52

Ja det var det jag undrade över, förstod inte det med sizeof och varför man multiplicerade sizeof(car*) med (numberofcars*)-index-1

försökte använda memmove men fick inte till det då. Men med memcpy fungerade det.

Laguna Online 30472
Postad: 30 dec 2022 22:03

Det ska fungera om du bara byter ut ordet memcpy mot memmove.

memcpy fungerar nog, men det är inte garanterat att fungera överallt, för kompilatorn får optimera det till en instruktion som kopierar de högre adresserna först, och då blir det fel.

erze7811 102
Postad: 30 dec 2022 22:13

Ok då fattar jag, tack!

Svara
Close