[42Seoul] memcpy를 알아보자

youngmki·2021년 5월 4일
0

Libft

목록 보기
3/5
post-thumbnail

1. 구조

#include <string.h>
	void	*memcpy(void *dst, const void *src, size_t n)

2. 기능

메모리의 값을 src에서 dst로 복사합니다.
리턴 값으로 dst의 시작 포인터가 반환됩니다

3. Parameter

1) void *dst

복사 받을 메모리의 시작을 가리키는 포인터입니다.
함수 내부적으로 unsigned char로 처리되어 작성됩니다.

2) const void *src

복사를 할 메모리의 시작을 가리키는 포인터입니다.
마찬가지로 함수 내부적으로 unsigned char로 처리되어 작성됩니다.

2) size_t len

복사할 메모리의 크기를 나타냅니다.

4. 사용예제

  • 기존에 쓰여져 있던 값이 새로운 값이 덮여쓰여진 모습입니다.
int main()
{
	char dst[20] = "aaaaaa";
	char src[20] = "copy this\0";

	printf("Before processed	: %s\n", dst);

	memcpy(dst, src, 10);
	printf("processed		: %s\n", dst);
}

5. 주의사항

size_t n

  • char array를 다루는 다른 함수와 마찬가지로 null character 관련해서 사이즈 조정에 주의가 필요합니다.
int main()
{
	char dst[20] = "!!!!!!!!!!!";
	char src[10] = "copy this";

	printf("Before processed	: %s\n", dst);

	memcpy(dst, src, 9 * sizeof(char));
	printf("processed		: %s\n", dst);
}

  • null character를 기준으로 출력하게 될때, 해당 null character 자리까지 복사가 이루어진 경우입니다.
  • 코드 작성시 의도한 것이 아닌 이상 해당 동작은 문제를 일으킬 수 있습니다.
int main()
{
	char dst[20] = "!!!!!!!!!!!";
	char src[10] = "copy this";

	printf("Before processed	: %s\n", dst);

	memcpy(dst, src, 10 * sizeof(char));
	printf("processed		: %s\n", dst);
}

  • null character까지 고려할 경우 srcnull character 값까지 성공적으로 들어가서 원하는 결과를 얻었음을 확인할 수 있습니다.

관심 있을 만한 포스트

0개의 댓글