C언어 memset, memcpy 함수 사용법
C언어에서 배열을 다루기 위한 여러 함수들이 있으며, 이 중에서 memset과 memcpy는 가장 기본적이면서도 중요한 함수이다. 이들 함수는 메모리 관리와 배열 조작을 효율적으로 수행할 수 있도록 도와준다.
⭐1. memset 함수
void *memset(void *ptr, int value, size_t num);
- ptr: 설정하고자 하는 메모리의 시작 주소
- value: 메모리에 설정할 값. int형으로 전달되지만, 실제로는 unsigned char로 변환되어 메모리에 저장된다.
- num: value로 설정할 바이트의 수
#include <stdio.h>
#include <string.h>
int main() {
int array[10];
memset(array, 0, sizeof(array));
for(int i = 0; i < 10; i++) {
printf("%d ", array[i]);
}
return 0;
}
이 예시에서 memset은 array의 모든 요소를 0으로 초기화한다.
주의 사항으로 int array[10] = {0,}; 이 코드 또한 결과 값은 0이다. 기본적으로 컴파일러는 사용자가 배열을 초기화하지 않을 경우, 0으로 초기화하기 때문이다. int array[10] = {0, }; 이 코드는 첫 번째 요소의 값만 사용자가 0으로 초기화하고 나머지 요소들은 컴파일러에 의해 0으로 초기화하기 때문에 절대 좋은 초기화 방법이라고 할 수 없다.
⭐2. memcpy 함수
memcpy 함수는 메모리의 일정 구역을 다른 메모리로 복사할 때 사용한다. 이 함수도 <string.h> 헤더 파일에 선언되어 있다. 함수의 원형은 다음과 같다.
void *memcpy(void *dest, const void *src, size_t num);
- dest: 데이터가 복사될 목적지 메모리의 시작 주소
- src: 복사할 데이터가 위치한 원본 메모리의 시작 주소
- num: 복사할 바이트의 수
#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]);
}
return 0;
}
이 예시에서 memcpy는 src 배열의 모든 요소를 dest 배열로 복사한다.
⭐3. 장점
- 성능: memset과 memcpy는 저수준에서 최적화되어 있어서 대량의 데이터를 초기화하거나 복사할 때 빠른 성능을 제공한다.
- 간결성: 이 함수들을 사용하면 복잡한 반복문 없이도 메모리의 대량의 데이터를 쉽고 빠르게 처리할 수 있다.
- 직접적인 메모리 접근: 이러한 함수들은 메모리에 직접 접근하여 작업을 수행하기 때문에, 메모리 조작과 관련된 다양한 작업에서 매우 유용하다.
728x90
반응형
'C언어 30강' 카테고리의 다른 글
[C/C++ Tip] 11. C언어 포인터 기본 사용법 (1) | 2024.09.19 |
---|---|
[C/C++ Tip] 10. Call by Value vs Call by Reference (0) | 2024.09.14 |
[C/C++ Tip] 8. 배열과 포인터 (0) | 2024.09.07 |
[C/C++ Tip] 7. 배열의 기초 (1) | 2024.09.04 |
[C/C++ Tip] 6. UNION 공용체와 STRUCT 구조체로 패킷 만들기 (2) | 2024.09.04 |