[Libft][C] memory ํจ์ ๊ตฌํ (memset / memmove / memchr / bzero / calloc)
memset
void *ft_memset(void *s, int c, size_t n)
๋ฉ๋ชจ๋ฆฌ์ ๋ด์ฉ(๊ฐ)์ ์ํ๋ ํฌ๊ธฐ๋งํผ ํน์ ๊ฐ์ผ๋ก ์ธํ ํ ์ ์๋ ํจ์์ด๋ค. (memory + setting)
- s: ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฃผ์
- c: ์ฑ์ ๋ฃ์ ๊ฐ (1๋ฐ์ดํธ์ง๋ฆฌ). unsigned char ๋ก ๋ณํ๋์ด์ ์ ์ฅ๋๋ค.
- n: ์ฑ์ธ ๋ฐ์ดํธ ์
memmove
void *ft_memcpy(void *dest, const void *src, size_t n)
void *ft_memmove(void *dest, const void *src, size_t n)
memmove
๋ memcpy
์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๋ณต์ฌํ๋ ํจ์์ด๋ค.
memmove
๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฒน์น๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด์ ์์ ํ๊ฒ ๋ณต์ฌํ๋ค.
- dest == src: ๋ณต์ฌ ๋์๊ณผ ์๋ณธ์ด ๊ฐ์ ์ฃผ์ → ๋ณต์ฌํ ํ์ ์์
- dest > src: ๋ฉ๋ชจ๋ฆฌ ์์ญ ๊ฒน์นจ ๊ฐ๋ฅ์ฑ ์์ → ๋ค์์๋ถํฐ ๋ณต์ฌ
- dest < src: ์์์๋ถํฐ ๋ณต์ฌํด๋ OK
dest > src ์์
: dest = src + 2
char str[] = "A B C D E F";
↑ ↑ ↑ ↑ ← src (str)
↑ ↑ ↑ ↑ ← dest (str + 2)
memcpy(str + 2, str, 4)
์ฌ์ฉ ์ (๋ฎ์ด์ฐ๊ธฐ ๋ฐ์)
์ด๊ธฐ ์ํ: [A][B][C][D][E][F]
๋ณต์ฌ ๋ชฉํ: โโโโโ→ ์ฌ๊ธฐ 4๊ธ์ ๋ฎ์ด์ฐ๊ธฐ
์ค๊ฐ ๊ณผ์ : [A][B][A][B][C][D] ← ๊นจ์ง ๊ฐ๋ฅ์ฑ
memmove(str + 2, str, 4)
์ฌ์ฉ ์ (์์ ๋ณต์ฌ)
์ด๊ธฐ ์ํ: [A][B][C][D][E][F]
๋ณต์ฌ ๊ณผ์ : ์์ ๋ฒํผ์ [A][B][C][D] ์ ์ฅ
๊ฒฐ๊ณผ: [A][B][A][B][C][D] ← ์ ์ ๋ณต์ฌ
์์ ์์์ฒ๋ผ dest
๊ฐ src
๋ณด๋ค ๋ค์ ์์ผ๋ฉด ๋ค์์๋ถํฐ ๋ณต์ฌํด์ผ ์์ ํ๋ค.
memchr
void *ft_memchr(const void *s, int c, size_t n)
s
์ ์์์๋ถํฐ n
๋ฐ์ดํธ๋ฅผ ๊ฒ์ฌํ๋ฉด์, c์ ์ผ์นํ๋ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๋ฅผ ์ฐพ์์ ๊ทธ ์์น์ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค.
๋ชป ์ฐพ์ผ๋ฉด NULL
์ ๋ฐํํ๋ค.
- s: ๊ฒ์ํ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฃผ์
- c: ์ฐพ์ ๋ฐ์ดํธ ๊ฐ (์ ์ํ์ด์ง๋ง ๋ด๋ถ์์ unsigned char๋ก ์บ์คํ ๋จ)
- n: ๊ฒ์ํ ๋ฐ์ดํธ ์
bzero
void ft_bzero(void *s, size_t n)
s
๋ถํฐ n
๋ฐ์ดํธ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ 0์ผ๋ก ์ด๊ธฐํ ํด์ฃผ๋ ํจ์์ด๋ค. (๋ฌธ์ ๊ธฐ์ค์ผ๋ก \0
, ์ซ์ ๊ธฐ์ค์ผ๋ก 0
)
calloc
void *ft_calloc(size_t nmemb, size_t size)
count
× size
๋ฐ์ดํธ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ , ์ ๋ถ 0์ผ๋ก ์ด๊ธฐํํด์ฃผ๋ ํจ์์ด๋ค.
(ํฌ์ธํฐ์์ NULL
, int
์์ 0
, char
์์ \0
)
- count: ํ ๋นํ ์์์ ๊ฐ์ (์: ๋ฐฐ์ด ํฌ๊ธฐ)
- size: ๊ฐ ์์์ ๋ฐ์ดํธ ํฌ๊ธฐ (์:
sizeof(int)
)