memcpy는 메모리 영역을 복사하는 함수입니다.
함수명 |
memcpy |
헤더 |
string.h |
형태 |
void *memcpy( void *new, const void *old, size_t count ) |
인자 |
new: 복사 당할 새 버퍼 old: 복사할 버퍼count:복사할 문자수 ( old의 문자수 : byte 단위 ) |
반환 |
new의 포인터를 반환, 실패시 NULL |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> #include <string.h> int main() { int dataOne[] = { 1, 2, 3, 4, 5 }; int dataTwo[] = { 6, 7, 8, 9, 10 }; printf("dataTwo 처음 데이터: "); for (int i = 0; i < 5; i++) { printf("%d ", dataTwo[i]); } memcpy(dataTwo, dataOne, sizeof(int) * (sizeof(dataOne) / sizeof(dataOne[0])) ); printf("\ndataTwo 바뀐 데이터: "); for (int i = 0; i < 5; i++) { printf("%d ", dataTwo[i]); } return 0; | cs |
<결과>
<예제2>
memcpy는 메모리를 복사하는 역할을 한다고 말씀드렸는데요.
memcpy를 사용할때는 주로 전체를 복사하는 경우가 많지만 때론
특정 부분만 복사해서 쓸 경우가 있습니다.
예제2 에선 특정 부분만 복사하는것을 보여 드리겠습니다.
특별하진 않지만 포인터의 개념을 잘 알고 있어야 이해가 쉽습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> #include <string.h> int main() { int dataOne[] = { 1, 2, 3, 4, 5 }; int dataTwo[] = { 6, 7, 8, 9, 10 }; printf("dataTwo 처음 데이터: "); for (int i = 0; i < 5; i++) { printf("%d ", dataTwo[i]); } memcpy(dataTwo+3, dataOne+2, 4); printf("\ndataTwo 바뀐 데이터: "); for (int i = 0; i < 5; i++) { printf("%d ", dataTwo[i]); } printf("\n"); return 0; } | cs |
<예제2 결과>
바뀐 부분은
예제1 memcpy(dataTwo, dataOne, sizeof(int) * (sizeof(dataOne) / sizeof(dataOne[0])) );
->
예제2 memcpy(dataTwo+3, dataOne+2, 4); 입니다.
dataOne,dataTwo는 배열입니다.
각 배열 dataOne[0],dataOne[1],dataOne[2]은 각자의 주소를 가지고 있죠!
memcpy(dataTwo+3, dataOne+2, 4); 의 의미는
dataOne+2 즉, dataOne[2]의 값을 dataTwo[3]의 메모리에 복사하겠다.
3번째 인수 4는 4byte를 뜻하니 한개만 복사하겠다는 의미입니다.
'Library > c Library' 카테고리의 다른 글
[C Library] realloc() 사용법! (1) | 2018.11.16 |
---|---|
[C Library] malloc 사용법!! (0) | 2018.11.12 |