저는 memmove가 어떻게 작동하는지 이해하려고합니다. 나는이 방식으로 메모리에 데이터가있는 예제를 사용하고있다.반대 순서로 memmove에 올바른 방법입니까?
Start at 0
First Memory Block(A) of size 10
Hence A->(0,10) where 0 being where it starts and 10 it's length.
Thus B-> (10,20)
C-> (30,50)
D-> (80,10)
의 우리가 위의 예에서는 90 될 것이라고 다음 삽입 할 수있는 기록하는 변수 X를한다고 가정 해 봅시다. 이제 B를 삭제하고 싶다면 C와 D를 B가 차지하는 여유 공간으로 이동시키고 싶습니다. 입력은 입력 배열입니다.
memmove(input+start(B),input+start(B)+length(B),X-(start(B)+length(B))
가 지금은 반대를위한 시도하려는 : 그래서 입력 배열이 블록에 속하는 처음 10 개 문자를 가진 모양을, 다음 (20)는 다음과 같이 내 생각이 memmove를을 사용하여 수행 할 수 있습니다 등 B 블록에 속하는 주문.
So we start from behind
Start at 100
First memory block(A) of size 10
A-> (100,10) 100 is where it starts and 10 it's length
B-> (90,20)
C-> (70,50)
D-> (20,10)
첫 번째 예와 마찬가지로 변수 X를 다음에 삽입 할 수있는 위치에 기록한다고 가정 해 봅시다. 이 예제는 역순으로 10입니다.
이제 블록 B를 삭제하려면 C와 D가 B의 공간에서 겹치기를 바란다. 이것은 반대 순서로 memmove 것입니다. I는이 방식으로 수행 할 수 있다고 생각 : 알렉스 주석 사항에 따라
memmove(input+start(B)-(start(B)-length(B)-X),input+X,start(B)-length(B)-X)
가, 나는 데이터의 정확한 순서를 유지하지 것 같아요. 데이터는 다음과 같을 것입니다 :
A->(90,10)
B->(70,20)
C->(40,30)
D->(20,20)
and X which would be D's starting address i.e at 20
Now if we want to delete B,memmove would look something like this.
memmove(input+X+length(B), input+X,start(B)-X)
더 좋은 방법이 있습니까?
숙제가 아닙니다.
당신은 맞습니다. 나는이 부분을 실수로 만들었고 다른 부분은 내가 편집하고 있습니다. – gizgok