ft_memcpy 구현
1. ft_memcpy 용도
* 이 함수는 파라미터로 void *dest, const void *source, size_t num을 가진다.
* src의 '\0'을 검사하지 않고 dest에 num 바이트만큼 source를 복사한 후 dest의 주소를 리턴.
2. ft_memcpy 프로토타입
void *ft_memcpy(void *dest, const void *source, size_t num)
void *dest : 복사한 문자열의 주소값
const void *source : 복사될 문자열의 주소값
size_t num : 얼만큼 복사할 것인지 기준이 되는 바이틀값 size_t num
3. 구현 시 유의사항
-
다른 str함수들과는 다르게 source의 '\0'을 검사하지 않는다.
-
dest와 source가 같다면 아무 동작도 하지 않고 dest의 주소를 리턴하면 된다.
<중요>
-
dest와 source를 unsigned char *로 형변환해야 한다.
-->
unsigned char
는모든 bit를 투명하게 볼 수 있는 특성
을 제공한다.
즉 다른 type은 내부 비트의 일부를 값을 표현하기 위한 용도가 아닌다른 용도
로 사용할 수 있으나 unsigned char는 이것이 허락되지 않아 mem함수, str함수에서는 unsigned char을 이용한다.또한 메모리 주소의 경우 부호 있는 정수 타입을 쓰면 안된다.
-
void 포인터 연산 시 unsigned char 포인터를 이용한다.
--> void 포인터 연산은 호환성을 위해 사용하지 않는 것이 좋다. 메모리 주소에 부호 있는 정수 타입을 쓰면 올바르게 동작하지 않기 때문에 비부호로 처리해야 한다.void 포인터의 경우 음수를 저장할 때 2의 보수 형태로 저장하게 된다. 단순히 부호 여부가 아닌 데이터를 저장하는 방식이 달라진다고 한다.
참고 : 링크텍스트
4. 코드 구현
#include "libft.h"
void *ft_memcpy(void *dest, const void *source, size_t num)
{
size_t index;
unsigned char *d;
unsigned char *s;
d = (unsigned char *)(dest);
s = (unsigned char *)(source);
index = 0;
if (s == d)
{
return (d);
}
while (index < num)
{
d[index] = s[index];
index++;
}
return (d);
}
5. 코드 구현 방법
(1) dest와 source를 unsigend char *로 형변환한다.
(2) s와 d가 같다면 아무 동작도 하지 않고 d의 주소를 반환.
(3) index가 num보다 작을 때까지 d에 s를 복사한다.
(4) d의 주소를 반환한다.
Author And Source
이 문제에 관하여(ft_memcpy 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeunjoo121/ftmemcpy저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)