<string.h> memcpy, memccpy 함수 설명, 나만의 메뉴얼!

세상을 바꿀 소프트웨어 공부/C언어

<string.h> memcpy, memccpy 함수 설명, 나만의 메뉴얼!

_별강 2021. 1. 8. 12:12
반응형

memcpy


  • memcpy 함수는 1번 메모리 지역(dest)으로 2번 메모리 지역(src)의 데이터를 n바이트만큼 복사하는 함수이다.

프로토타입

void *my_memcpy(void *dst, const void *src, size_t n);  

파라미터(인자)

void *destination

1번 메모리지역, 카피당해서 덮어 씌워질 공간

const void *source

2번 메모리지역, 이곳의 데이터를 dest에 붙여넣음

size_t number

몇 바이트 만큼 복사할지!

변수

unsigned long long turtle;

index다. n바이트 만큼 복사하도록 도와줄 것이다.
인덱스는 솔직히 누구나 다 알아보니까 나만의 개성을 담고 싶어서 거북이로 하였다.

unsigned char *ptr_dest;

dest의 포인터이다.

dest가 void 포인터형으로 들어와서 자료형이 정해진 포인터인 이친구가 필요하다.

unsigned char *ptr_src;

src의 포인터이다.

src가 void 포인터형으로 들어와서 자료형이 정해진 포인터인 이친구가 필요하다.

구현 코드

void *my_memcpy(void* dest, const  void* src, size_t  num)  

{  

unsigned long long turtle;  
unsigned char *ptr_dest;    
unsigned char *ptr_src;  

turtle = 0;    
ptr_dest = (unsigned char *)dest;  
ptr_src = (unsigned char *)src;  
while (turtle < num)  
{  
ptr_dest[turtle] = ptr_src[turtle];  
turtle++;
}  

return(dest);  
}  

memccpy

memccpy는 memcpy와 같은 방식으로 복사를 하다가 특정c(캐릭터)를 찾으면 그 주소를 반환하고, 없으면 다 복사하고 널포인터를 반환함

프로토타입

void *my_memccpy(void *dest, void const *src, int c, size_t n)  

파라미터(인자)

void *destination

1번 메모리지역, 카피당해서 덮어 씌워질 공간

const void *source

2번 메모리지역, 이곳의 데이터를 dest에 붙여넣음

int c

* 찾을 특정 캐릭터값

size_t number

몇 바이트 만큼 복사할지!

변수

변수는 memcpy와 같다.

unsigned long long turtle;

index다. n바이트 만큼 복사하도록 도와줄 것이다.
인덱스는 솔직히 누구나 다 알아보니까 나만의 개성을 담고 싶어서 거북이로 하였다.

unsigned char *ptr_dest;

dest의 포인터이다.

dest가 void 포인터형으로 들어와서 자료형이 정해진 포인터인 이친구가 필요하다.

unsigned char *ptr_src;

src의 포인터이다.

src가 void 포인터형으로 들어와서 자료형이 정해진 포인터인 이친구가 필요하다.

구현 코드

void *my_memccpy(void *dest, void const *src, int c, size_t n)  
{  
unsigned char* ptr_dest;  
unsigned char* ptr_src;  
unsigned  long  long  turtle;  

ptr_dest = (unsigned char *)dest;  
ptr_src = (unsigned char *)src;  
turtle = 0;  
while(turtle < n)  
{  
ptr_dest[turtle] = ptr_src[turtle];  
if (ptr_dest[turtle] == c)  
return((void *)(ptr_dest + turtle + 1));  
turtle++;  
}  

return(NULL);  
}  

읽어주셔서 감사합니다.

마크다운 환경에서 작성했습니다.

이글을 쓴 저는 아직 공부하는 학생이라 틀린 부분이 있을 수 있습니다. 양해 부탁드립니다. 아시는 것이 있다면 댓글로 수정 요청 바랍니다.

반응형