memcpy 함수는 메모리 블록을 한 위치에서 다른 위치로 복사할 때 사용되는 C 표준 라이브러리 함수입니다. 대용량 데이터를 효율적으로 복사할 수 있으며, 시스템 프로그래밍 및 성능 최적화에 자주 활용됩니다.
1. memcpy 함수 기본 문법
#include <string.h>
void *memcpy(void *dest, const void *src, size_t n);
매개변수 설명:
- dest: 복사한 데이터를 저장할 대상 메모리의 포인터
- src: 복사할 원본 메모리의 포인터
- n: 복사할 바이트 수
반환 값:
- dest 포인터를 반환합니다.
2. 기본 사용 예제
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[20];
memcpy(dest, src, strlen(src) + 1); // 널 종료 문자를 포함한 복사
printf("복사된 문자열: %s\n", dest);
return 0;
}
출력 결과:
복사된 문자열: Hello, World!
3. 다양한 memcpy 활용 예제
3.1. 배열 복사
#include <stdio.h>
#include <string.h>
int main() {
int src[] = {1, 2, 3, 4, 5};
int dest[5];
memcpy(dest, src, sizeof(src));
for (int i = 0; i < 5; i++) {
printf("%d ", dest[i]);
}
printf("\n");
return 0;
}
출력 결과:
1 2 3 4 5
3.2. 구조체 복사
#include <stdio.h>
#include <string.h>
typedef struct {
char name[20];
int age;
} Person;
int main() {
Person p1 = {"Alice", 30};
Person p2;
memcpy(&p2, &p1, sizeof(Person));
printf("이름: %s, 나이: %d\n", p2.name, p2.age);
return 0;
}
출력 결과:
이름: Alice, 나이: 30
4. memcpy 사용 시 주의할 점
- 중첩 영역(overlapping memory): memcpy는 중첩된 메모리 영역에서 올바르게 작동하지 않습니다. 이런 경우 memmove를 사용하세요.
- 정확한 크기 지정: 복사할 크기(n)가 올바른지 확인하세요. 잘못된 크기 지정은 버퍼 오버플로우를 유발할 수 있습니다.
- 널 종료 문자 처리: 문자열 복사 시 널 종료 문자를 포함해야 올바른 문자열로 처리됩니다.
5. 실전 예제: 버퍼 복사
#include <stdio.h>
#include <string.h>
int main() {
char buffer1[] = "C Programming";
char buffer2[50];
memcpy(buffer2, buffer1, strlen(buffer1) + 1);
printf("복사된 버퍼: %s\n", buffer2);
return 0;
}
출력 결과:
복사된 버퍼: C Programming
6. 결론
memcpy 함수는 메모리 복사 작업에서 매우 강력하고 효율적인 도구입니다. 배열, 구조체, 문자열 등 다양한 데이터 유형을 빠르게 복사할 수 있으며, 올바른 사용법과 주의사항을 숙지하면 성능이 중요한 애플리케이션에서 큰 도움이 됩니다.
'Standard C' 카테고리의 다른 글
C 언어 fclose 사용법 완벽 가이드 (0) | 2025.02.22 |
---|---|
C 언어 clearerr 사용법 완벽 가이드 (0) | 2025.02.22 |
C 언어 BUFSIZ 사용법 완벽 가이드 (0) | 2025.02.22 |
C 언어 sprintf 사용법 완벽 가이드 (0) | 2025.02.22 |
C 언어 printf 사용법 완벽 가이드 (0) | 2025.01.18 |