📌ft_memcpy
src메모리영역에서 dest메모리 영역으로 n byte만큼 복사
void *ft_memcpy(void *dest, const void *src, unsigned int n);
➕ 매개변수 (Parameters)
dest
: 채우고자 하는 메모리의 시작 주소src
: 복사하려는 메모리의 시작 주소n
: 채우고자 하는 바이트의 수
➕ 반환값 (Return)
void *
: dest의 포인터 반환
➕ 설명 (Description)
strcpy() 함수와의 차이점은
문자열은 문자열의 끝을 Null 바이트로 구분하지만
메모리는 Null 바이트도 데이터이기 때문에 n을 명시적으로 지정해야 한다는 것이다.
➕ 코드 (Code)
#include "libft.h"
void*ft_memcpy(void *dest, const void *src, size_t n)
{
unsigned int i; // unsigned int 형인 n과 비교하기위해 int 가 아닌 unsigned int 로 선언
char *tmp;
const char *str;
i = -1;
tmp = dest;
str = src;
if (!dest) //dest 가 비어있을 경우
return (0);
if (!n || dest == src) // n이 0이거나 dest의 주소와 src의 주소가 같을 경우
return (dest);
while (++i < n) //tmp에 src메모리의 값을 하나씩 넣기
tmp[i] = str[i];
return (dest);
}
📌ft_memccpy
src메모리영역에서 dest메모리 영역으로 n byte만큼 복사
void *ft_memcpy(void *dest, const void *src, int c, unsigned int n);
➕ 매개변수 (Parameters)
dest
: 채우고자 하는 메모리의 시작 주소src
: 복사하려는 메모리의 시작 주소c
: 같은지 확인하려는 문자n
: 채우고자 하는 바이트의 수
➕ 반환값 (Return)
void *
- 제대로 copy됬을 시 : NULL
- c와 같은 문자를 만나 중간에 중단됬을 경우 : 다음문자에 대한 포인터 반환 (값을 복사한 그 다음 index의 dest 주소를 반환)
➕ 설명 (Description)
➕ 코드 (Code)
#include "libft.h"
void*ft_memccpy(void *dest,
const void *src, int c, unsigned int n)
{
char*tmp;
const char *str;
unsigned int i;
i = 0;
tmp = dest;
str = src;
if (!dest || !src)
return (0);
if (!n || dest == src)
return (0);
while (i < n)
{
tmp[i] = str[i];
if (str[i] == c)
return (&dest[i + 1]);
i++;
}
return (0);
}
반응형
'➰ 코딩 부트캠프 > 42 seoul' 카테고리의 다른 글
[0 Circle] Libft - ft_strlcpy, ft_strlcat (0) | 2020.12.23 |
---|---|
[0 Circle] Libft - ft_memcmp, ft_strlen (0) | 2020.12.23 |
[0 Circle] Libft - ft_memmove, ft_memchr (0) | 2020.12.22 |
[0 Circle] Libft - ft_memset, ft_bzero (0) | 2020.12.22 |
Makefile 만들기 (0) | 2020.12.21 |