프로그래밍/C,C++

memmove_s 함수

MAKGA 2021. 12. 27. 09:15
320x100

MSDN: https://docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/memmove-s-wmemmove-s?view=msvc-170 

 

원형은 다음과 같다.

errno_t memmove_s(
   void *dest,
   size_t numberOfElements,
   const void *src,
   size_t count
);
errno_t wmemmove_s(
   wchar_t *dest,
   size_t numberOfElements,
   const wchar_t *src,
   size_t count
);

 

변수명은 number of Elements 라고 되어있지만 갯수(_countof())가 아닌 사이즈(sizeof())를 넘겨야 된다.

예제는 seq 번째 데이터들을 앞으로 1칸씩 당겨오는 코드다.

int main()
{
	int arr[4] = { 1,2,3,4 };

	for (int i = 0; i < _countof(arr); ++i)
		std::cout << arr[i] << ", " << std::endl;

	int seq = 1;

	::memmove_s(
		arr + seq,
		(_countof(arr) - seq) * sizeof(arr[0]),
		arr + seq + 1,
		(_countof(arr) - seq - 1) * sizeof(arr[0]));

	for (int i = 0; i < _countof(arr); ++i)
		std::cout << arr[i] << ", " << std::endl;

	return 0;
}

 

다만 이름이 move라 메모리가 그대로 이동할 것 같지만 사실은 copy가 되고 있기 때문에 이전 sour부분에는 기존 데이터가 그대로 남는다.


 

320x100