๐Ÿƒ‍โ™€๏ธ Activities/42 Cursus

[Libft][C] memory ํ•จ์ˆ˜ ๊ตฌํ˜„ (memset / memmove / memchr / bzero / calloc)

0=2. 2025. 6. 2. 18:01

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))