๐memcpy
โ๏ธ ํจ์ ํ๋กํ ํ์
void *memcpy(void *restrict dst, const void *restrict src, size_t n);
โ๏ธ ํจ์์ ์ญํ : ๋ฉ๋ชจ๋ฆฌ์์ญ src๋ก๋ถํฐ n ๋ฐ์ดํธ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์์ญ dst์ ๋ณต์ฌํ๋ค.
โ๏ธํจ์ ๋ฐํ๊ฐ
โ๏ธ dst
๐์ถ๊ฐ ์ค๋ช ๐
โฟ dst์ src์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๊ฒน์ณ์ ธ์๋ ๊ฒฝ์ฐ๋ undefined behavior์ด๋ค. (๊ฒน์ณ์ ธ ์๋ ๊ฒฝ์ฐ๋ memmove()๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.)
โ๏ธ๊ตฌํ
#include "libft.h"
void *ft_memcpy(void *dst, const void *src, size_t n)
{
size_t i;
i = 0;
if (dst == 0 && src == 0)
return (NULL);
if (n == 0)
return (dst);
while (i < n)
{
*((unsigned char *)dst + i) = *((unsigned char *)src + i);
i++;
}
return (dst);
}
(42์์ธ์ libft ๊ณผ์ ์์๋ c90์ ์ด์ฉํด ์ปดํ์ผํ๊ธฐ ๋๋ฌธ์ restrict๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.)
๐memmove
โ๏ธ ํจ์ ํ๋กํ ํ์
void *memmove(void *dst, const void *src, size_t len);
โ๏ธ ํจ์์ ์ญํ : src์ len ๋ฐ์ดํธ๋ฅผ dst์ ๋ณต์ฌํ๋ค. src์ dst๋ ๊ฒน์ณ์ง ์ ์๋ค; ๋ณต์ฌ๋ ํญ์ ํผ์ํ์ง ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
โ๏ธํจ์ ๋ฐํ๊ฐ
โ๏ธ dst
๐์ถ๊ฐ ์ค๋ช ๐
โฟ ๊ตฌํ ์ dst์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ src๋ณด๋ค ์์ ์๋ ๊ฒฝ์ฐ์ ๋ค์ ์๋ ๊ฒฝ์ฐ๋ก ๋๋์ด ๊ตฌํํ๋ค.
โฟ dst < src ์ธ ๊ฒฝ์ฐ, ์์์๋ถํฐ ๋ณต์ฌ
โฟ dst > src ์ธ ๊ฒฝ์ฐ, ๋ ๋ฌธ์์ด์ด ๊ฒน์ณ์ ธ์์ ์๋ ์์ผ๋ฏ๋ก ์๋ณธ์ ํผ์์ํค์ง ์๊ธฐ ์ํด ๋ค์์๋ถํฐ ๋ณต์ฌํ๋ค.
โฟ dst == src์ธ ๊ฒฝ์ฐ , dst๋ฅผ ๋ฆฌํด
โ๏ธ๊ตฌํ
#include "libft.h"
void *ft_memmove(void *dst, const void *src, size_t len)
{
int i;
unsigned char *dst2;
unsigned char *src2;
dst2 = (unsigned char *)dst;
src2 = (unsigned char *)src;
if (dst == src || len == 0)
return (dst);
if (dst < src)
{
i = -1;
while (++i < (int)len)
dst2[i] = src2[i];
}
else
{
i = (int)len;
while (i--)
dst2[i] = src2[i];
}
return (dst);
}
'๐ฐ42์์ธ > libft' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[libft] ft_atoi.c ๊ตฌํ (0) | 2022.02.17 |
---|---|
[libft] ft_memset, ft_bzero, ft_memchr ๊ตฌํ (0) | 2022.02.15 |
[libft] ft_strncmp, ft_memcmp ๊ตฌํ (0) | 2022.02.14 |
[42์์ธ] libft ์ ๋ฆฌ : ft_strchr, ft_strrchr๊ตฌํ (0) | 2022.02.13 |
[42์์ธ] libft ์ ๋ฆฌ : ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํ Makefile (0) | 2022.02.11 |