[PS] memcpy 사용법

정재훈·2022년 3월 11일
0

Problem Solving

목록 보기
16/17
post-thumbnail

memcpy는 특정 배열이나 값들을 복사(복제) 할때 사용하는 함수이다.
for문을 통하여 복제할 수 도 있지만, 해당 함수를 이용하여 조금 더 가시성있고 시간복잡도를 줄일 수 도 있다.

memcpy 함수를 사용하기 위해서는 다음 라이브러리가 필요로 한다.

#include <cstring>
or
#include <string.h>

특정 배열에 저장된 값을 복사한다고 가정을 해보겠습니다.

memcpy는 3가지 인자를 필요로 합니다.
첫번째 인자
= 복사 받을 배열

두번째 인자
= 복사할 배열

세번째 인자
= 복사할 데이터(값)의 길이(바이트 단위)

두번째 인자 배열을 세번째 인자 만큼 복사해서 첫번째 인자 배열에 붙여 넣는 함수 입니다.

memcpy (복사받는 배열, 복사할 배열, 길이)

넘어가기 앞서, 우선 자료형의 바이트 값에 대해 알아보겠습니다.
자주 사용하는 자료형의 바이트 값을 외워 주어도 좋습니다.

char: 1, short: 2, int: 4, long: 4, long long: 8

바이트 값을 구하는 다른 방법으로는 sizeof()라는 함수를 사용하는 것입니다.

sizeof(int) // 4
sizeof(char) // 1

이와 같이 자료형 바이트 값을 쉽게 구할 수 있습니다.
모든 배열 복사는 sizeof(복사할 배열)로 쉽게 가능하다

memcpy는 intchar 자료형에 많이 사용됩니다.
string은 = 연산자를 사용하여 쉽게 복사를 할 수 있습니다.

#include <iostream>
#include <cstring>
using namespace std;

int main() {
	
	// 복사할 배열
	int arr[2][2] =
	{
		1,2,
		3,4,
	};
	// 복사되는 배열
	int brr[2][2];
	// 복사 함수
    // memcpy(brr,arr,sizeof(arr)); 도 가능
	memcpy(brr, arr, sizeof(int)*2*2);

	//  출력
	for (int i = 0; i < 2; i++) {
		for (int j = 0; j < 2; j++) {
			cout << brr[i][j] << " ";
		}
		cout << endl;
	}
	
	
	
	return 0;
}

결과

자료형은 char로 하고 동일한 결과를 출력하는 코드는 다음과 같습니다.

#include <iostream>
#include <cstring>
using namespace std;

int main() {
	
	// 복사할 배열
	char arr[2][2] =
	{
		'1','2',
		'3','4',
	};
	// 복사되는 배열
	char brr[2][2];
	// 복사 함수
	memcpy(brr, arr, sizeof(char)*2*2);

	//  출력
	for (int i = 0; i < 2; i++) {
		for (int j = 0; j < 2; j++) {
			cout << brr[i][j] << " ";
		}
		cout << endl;
	}
	
	
	
	return 0;
}
profile
여러 방향으로 접근하는 개발자

0개의 댓글