[๐Ÿงฑ|CS] printf ๋งŒ๋“ค๊ธฐ! printf ๋งŒ๋“ค๊ธฐ!!!!

minseok128ยท2024๋…„ 10์›” 14์ผ
2
post-thumbnail

So, when I read C, I know what the assembly language will look like, and that's something I care about.

C๋ฅผ ์ฝ์œผ๋ฉด ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๊ณ , ๊ทธ๊ฒƒ์ด ์ œ๊ฐ€ ์‹ ๊ฒฝ ์“ฐ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

-- ๋ฆฌ๋ˆ„์Šค ํ† ๋ฅด๋ฐœ์Šค(๋ฆฌ๋ˆ…์Šค ์ปค๋„๊ณผ Git ์‹œ์Šคํ…œ์˜ ์ฐฝ์‹œ์ž)
https://www.youtube.com/watch?v=CYvJPra7Ebk


printf๋Š” ์™œ ๋งŒ๋“œ๋‚˜์š”?

์šฐ๋ฆฌ๋Š” ํ•™๊ต์—์„œ ์ปดํ“จํ„ฐ ๊ณผํ•™์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์šด์˜์ฒด์ œ, ์ปดํ“จํ„ฐ ๊ตฌ์กฐ ๋“ฑ์„ ๋ฐฐ์šฐ์ง€๋งŒ, ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ๋Š” React, JavaScript, Node.js, Express, Python, Next.js, Java, Spring ๊ฐ™์€ ๋งค์šฐ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋‹ค๋ฃจ๊ฒŒ ๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ŠคํŒฉํŠธ๋Ÿผ

์ƒ๊ฐํ•ด๋ณด๋ฉด ์ด๋Ÿฐ ํ˜„์ƒ์€ ๊ฝค๋‚˜ ๊ดด๋ฆฌ๊ฐ์ด ๋“ ๋‹ค. ํ•™๊ต์—์„œ ๋ฐฐ์šฐ๋Š” CS ๊ณผ๋ชฉ์€ ๋Œ€๋ถ€๋ถ„ ์ด๋ก ์„ ๋‹ค๋ฃจ๊ณ , ์šฐ๋ฆฌ๋Š” 1~2์ฃผ ๋™์•ˆ ์ตœ์„ ์„ ๋‹คํ•ด ์•”๊ธฐ๋ฅผ ์™„๋ฃŒํ•œ ์ง€์‹์œผ๋กœ ์‹œํ—˜์„ ๋ณธ๋‹ค.

๋ฐ˜๋ฉด, ์œ ํ–‰ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋”ฐ๋กœ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋“ค์—ฌ ๊ณต๋ถ€ํ•˜๊ณ  ์—ฐ์Šตํ•œ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค "์ด๋Ÿด ๊ฑฐ๋ฉด ํ•™๊ต์—์„œ๋„ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฐ€๋ฅด์น˜๋ฉด ๋˜๋Š” ๊ฑฐ ์•„๋‹๊นŒ?"๋ผ๋Š” ์ƒ๊ฐ์ด ๋“œ๋Š” ๊ฒƒ์ด ์‚ฌ์‹ค์ด๋‹ค. ์‹ค์ œ๋กœ, ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ช‡ ๋‹ฌ๊ฐ„ ์ง‘์ค‘์ ์œผ๋กœ ๊ฐ€๋ฅด์ณ ์ทจ์—…์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ถ€ํŠธ์บ ํ”„๊ฐ€ ์œ ํ–‰ํ•˜๋Š” ํ˜„์‹ค ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์˜๋ฌธ์€ ์–ธ์ œ๋‚˜ ์šฐ๋ฆฌ๋ฅผ ๋ถˆํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.

๋ถˆํŽธํ•จ์€ ๋•Œ๋•Œ๋กœ ๊ณตํฌ๋กœ ๋ณ€ํ•ด "CS ๊ณต๋ถ€์— ๋‚ญ๋น„ํ•  ์‹œ๊ฐ„์œผ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ณต๋ถ€ํ•˜์ž!!!"์™€ ๊ฐ™์€ ๊ทน๋‹จ์ ์ธ ์ฃผ์žฅ์œผ๋กœ ์ด์–ด์ง€๊ธฐ๋„ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์ด๋Š” ์ •๋‹ต์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ ์–ด๋„ n๋…„์˜ ์‹œ๊ฐ„์„ ์Ÿ์•„์„œ CS๋ฅผ ๊ณต๋ถ€ํ•ด์•ผํ•˜๋Š” ํ™˜๊ฒฝ์— ๋†“์—ฌ ์žˆ๋‹ค๋ฉด ๋”์šฑ ๊ทธ๋ ‡๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด CS๋Š” ์™œ ์ค‘์š”ํ•œ ๊ฑธ๊นŒ? ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๊ณ ์ˆ˜์ค€์˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋“ค์ด ๋ชจ๋‘ ํŠผํŠผํ•˜๊ณ  ๊ฒ€์ฆ๋œ ๋‚ฎ์€ ์ถ”์ƒํ™” ์ˆ˜์ค€์˜ CS ๊ธฐ๋ฐ˜ ์œ„์—์„œ ๊ฝƒ์„ ํ”ผ์šด ๊ฒƒ๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!

๊ณ ๋Œ€ ์ธ๋„์ธ๋“ค์˜ ์ „์„ค ์† ์ง€๊ตฌ์˜ ๋ชจ์–‘

์ฝ”๋ผ๋ฆฌ๋Š” ๋Œ€์ฒด๋˜๊ฑฐ๋‚˜ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๊ฑฐ๋ถ์ด๋Š” ์ •๋ง ์˜ค๋žœ ์‹œ๊ฐ„ ๊ฑด์žฌํ•˜๋‹ค. ๊ฑฐ๋ถ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋น ๋ฅด๊ฒŒ ๋ฐ”๋€Œ๋Š” ์ฝ”๋ผ๋ฆฌ๋ฅผ ๊ทธ ์œ„์— ์˜ฌ๋ ค๋†“๋Š” ๊ฒƒ์€ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿผ ๊ฑฐ๋ถ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ? ๊ทธ๊ฒƒ์€ ์ปดํ“จํ„ฐ ๊ตฌ์กฐ, ์šด์˜์ฒด์ œ ๊ทธ๋ฆฌ๊ณ  ์ด๋“ค๊ณผ ์ง์ ‘์ ์œผ๋กœ ์†Œํ†ตํ•˜๋Š” C์–ธ์–ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ C์–ธ์–ด์— ์ฃผ๋ชฉํ•ด๋ณด์ž.

printf ๋งŒ๋“ค๊ธฐ

printf(โ€hello worldโ€)

๋ถ„๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธด ํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ C์–ธ์–ด๋Š” ๊ธฐ๊ณ„์–ด์™€ ๊ฐ€๊นŒ์šด ์ €์ˆ˜์ค€ ์–ธ์–ด๋ผ๊ณ  ๋ฐฐ์› ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ C์–ธ์–ด์—์„œ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ํ•จ์ˆ˜์ธ printf๋ฅผ ํ† ๋ฐœ์Šค์˜ ๋ง์ฒ˜๋Ÿผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์ฆ‰์‹œ ์น˜ํ™˜ํ•ด์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? ๋‹น์—ฐํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

a = b + c
โ†’ add r1 r2 r3

for (i = 0; i < 10; i++) โ€ฆ
โ†’ beq ยทยทยท j ยทยทยท ~

printf(โ€hello %s!!โ€, โ€œwordโ€)
โ†’ โ€ฆ..?

๊ทธ๋ ‡๋‹ค. printf๋Š” ๋‚ฎ์€ ์ˆ˜์ค€์˜ ์–ธ์–ด๋ผ๊ณ  ์—ฌ๊ฒจ์ง€๋Š” C์—์„œ ๊ฐ€์žฅ ๋Œ€ํ‘œ๊ฒฉ์œผ๋กœ ํ”ํžˆ ์“ฐ์ด์ง€๋งŒ, ์‚ฌ์‹ค ์•Œ๊ณ  ๋ณด๋ฉด ์ด ํ•จ์ˆ˜๋„ ์ถ”์ƒํ™” ์ˆ˜์ค€์ด ๋†’์€ ๋งค์šฐ ๊ณ ์ˆ˜์ค€ ํ•จ์ˆ˜์˜€๋‹ค! ์šฐ๋ฆฌ๋Š” printf๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, ์ปดํ“จํ„ฐ๊ฐ€ ์–ด๋–ค ์ผ์„ ํ•˜๋Š”์ง€ ์ƒ์ƒํ•˜๊ธฐ ์–ด๋ ต๋‹ค!

์ด๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ถœ๋ ฅ์„ ์œ„ํ•ด ์šด์˜ ์ฒด์ œ์˜ ์‹œ์Šคํ…œ ์ฝœ์ธ write ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, printf๋Š” ์ด write๋ฅผ ํฌ๋งทํŒ… ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ์‹ธ์„œ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํฌ์žฅ์ง€ ์—ญํ• ์„ ํ•˜๊ณ  ์ด๋ฅผ ๊ฐ์ถ”๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๋˜๋‹ค๋ฅธ ํฌ์žฅ์˜ ์˜ˆ

๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ์Šคํ…œ ์ฝœ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์‹œ์Šคํ…œ ์ฝœ(System Call)์ด๋ž€ ์šด์˜ ์ฒด์ œ์™€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋งํ•œ๋‹ค. ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜ ์ฒด์ œ์˜ ์ปค๋„์— ์ ‘๊ทผํ•˜์—ฌ ํ•˜๋“œ์›จ์–ด ์ž์›์— ์ง์ ‘ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜, ํŒŒ์ผ ์ž…์ถœ๋ ฅ, ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.*

์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„ํ•œ printf ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๊ฒŒ๋ ย write ํ•จ์ˆ˜๋„ ์‹œ์Šคํ…œ ์ฝœ์˜ ์ผ์ข…์œผ๋กœ, ์ปค๋„์„ ํ†ตํ•ด ์ถœ๋ ฅ ์žฅ์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์‹œ์Šคํ…œ ์ฝœ ํ•จ์ˆ˜๋Š” ์ปค๋„๊ณผ ํ•˜๋“œ์›จ์–ด์— ์ง์ ‘ ์ ‘๊ทผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์Šคํ…œ ์ฝœ์˜ ๋™์ž‘์„ C ์–ธ์–ด๋กœ ์ง์ ‘ ์„ค๊ณ„ํ•˜๊ณ  ์ž‘์„ฑํ•  ์ˆ˜๋Š” ์—†์œผ๋ฉฐ, ์šด์˜ ์ฒด์ œ์˜ ์ปค๋„๊ณผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด๋กœ ๊ตฌํ˜„๋œ๋‹ค. write ํ•จ์ˆ˜๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๊ณ  ์ปค๋„์— ์ž์‹ ์˜ ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฌธ๋“ ์ด๋Ÿฐ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์ง„์งœ ์ €์ˆ˜์ค€์˜ ๋ฐฉ์‹์œผ๋กœ, ์˜ค์ง write์™€ ๋ช‡๊ฐ€์ง€ ์‹œ์Šคํ…œ ์ฝœ ํ•จ์ˆ˜๋งŒ ์‚ฌ์šฉํ•ด ์ง์ ‘ printf๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋ฉด ์–ด๋–จ๊นŒ? ์ด์ œ <stdio.h> ๊ฐ™์€ ๊ณ ์ˆ˜์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ์ •๋ง ๋งจ๋•…๋ถ€ํ„ฐ printf๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž!


๋‚˜์˜ ft_printf์˜ ์„ค๊ณ„ ๊ฐœ์š”

์šฐ์„ , ft_printf.h ํ—ค๋” ํŒŒ์ผ์—์„œ๋Š” ํ•จ์ˆ˜๋“ค์„ ์ •์˜ํ•˜๊ณ  ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จ์‹œ์ผฐ๋‹ค. ๋˜ํ•œ, ํ•„์š”ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋“ค๋„ ๋ชจ๋‘ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์„ ์™„์ „ํžˆ ์ดํ•ดํ•˜๊ณ  ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ft_printf๋Š” write ์‹œ์Šคํ…œ ์ฝœ์„ ์ด์šฉํ•ด ๋ฌธ์ž ์ถœ๋ ฅ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, C ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ printf์™€ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋กœ ์ž‘๋™ํ•œ๋‹ค. ๋˜ํ•œ, ๊ฐ€๋ณ€ ์ธ์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด stdarg.h๋ฅผ ํฌํ•จํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ์ธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

#ifndef FT_PRINTF_H
# define FT_PRINTF_H
# include <unistd.h>
# include <stdlib.h>
# include <stdarg.h>

int ft_printf(const char *format, ...);
...
#endif

ํ•ต์‹ฌ ๊ตฌํ˜„: ft_printf.c

ft_printf์˜ ํ•ต์‹ฌ์€ ํฌ๋งทํŒ… ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ, % ๋ฌธ์ž๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ print_va ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. print_va ํ•จ์ˆ˜๋Š” ์ธ์ž ํƒ€์ž…์— ๋”ฐ๋ผ ์•Œ๋งž์€ ์ถœ๋ ฅ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

  • %c : ๋‹จ์ผ ๋ฌธ์ž ์ถœ๋ ฅ
  • %s : ๋ฌธ์ž์—ด ์ถœ๋ ฅ
  • %d, %i : ์ •์ˆ˜ ์ถœ๋ ฅ
  • %u : ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜ ์ถœ๋ ฅ
  • %p : ํฌ์ธํ„ฐ ์ฃผ์†Œ ์ถœ๋ ฅ
  • %x, %X : 16์ง„์ˆ˜ ์ถœ๋ ฅ
int ft_printf(const char *format, ...)
{
    va_list ap;
    int i = 0;
    int len = 0;
    int tmp;

    va_start(ap, format);
    while (format[i])
    {
        if (format[i] == '%')
        {
            tmp = print_va(format[++i], ap);
            i++;
        }
        else
            tmp = write(1, &format[i++], 1);
        if (tmp == -1)
            return (-1);
        len += tmp;
    }
    va_end(ap);
    return (len);
}

์ง์ ‘ ๊ตฌํ˜„ํ•œ ft_printf๋Š” ํฌ๋งท ๋ฌธ์ž์—ด์„ ํ•ด์„ํ•ด ์ถœ๋ ฅํ•  ๊ฐ’์„ ๊ฒฐ์ •ํ•˜๊ณ , ๊ฐ ํƒ€์ž…์— ๋งž๋Š” ์ถœ๋ ฅ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค. ๋˜ํ•œ, printf์ฒ˜๋Ÿผ ์ถœ๋ ฅ๋œ ๋ฌธ์ž์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๊ตฌํ˜„ํ•˜์—ฌ ํ‘œ์ค€ printf์™€ ๋™์ผํ•œ ๋™์ž‘์„ ํ•˜๋„๋ก ํ–ˆ๋‹ค.

ํƒ€์ž…๋ณ„ ์ถœ๋ ฅ ํ•จ์ˆ˜๋“ค

๊ฐ ํƒ€์ž…์— ๋”ฐ๋ผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜๋“ค์€ ๋ชจ๋‘ print_va ํ•จ์ˆ˜์—์„œ ํ˜ธ์ถœ๋œ๋‹ค. ๊ฐ ํƒ€์ž…์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€ ๊ฐ„๋žตํžˆ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

๋ฌธ์ž ์ถœ๋ ฅ (print_c.c)

%c๋Š” ๋‹จ์ผ ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. va_arg๋ฅผ ํ†ตํ•ด int ํƒ€์ž…์˜ ์ธ์ž๋ฅผ ๋ฐ›์•„์„œ ์ถœ๋ ฅํ•œ๋‹ค.

int print_c(va_list ap)
{
    unsigned char c;
    c = va_arg(ap, int);
    return (write(1, &c, 1));
}

์ •์ˆ˜ ์ถœ๋ ฅ (print_d.c)

์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ft_ltoa ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ์ถœ๋ ฅํ•œ๋‹ค. ft_ltoa ์—ญ์‹œ ์ง์ ‘ ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜๋กœ, ์ •์ˆ˜๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋กœ์ง์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ์—๋Š” ๋ถ€ํ˜ธ๋ฅผ ๋ถ™์ด๋Š” ๋“ฑ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

int print_d(va_list ap)
{
    char *nbr;
    int size;
    int tmp;

    tmp = va_arg(ap, int);
    nbr = ft_ltoa(tmp);
    if (!nbr)
        return (-1);
    size = ft_strlen(nbr);
    size = write(1, nbr, size);
    free(nbr);
    return (size);
}

ํฌ์ธํ„ฐ ์ถœ๋ ฅ (print_p.c)

ํฌ์ธํ„ฐ๋Š” 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅ๋˜๋ฉฐ, 0x๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฃผ์†Œ ํ˜•์‹์„ ๊ฐ€์ง„๋‹ค. ํฌ์ธํ„ฐ ์ฃผ์†Œ๋ฅผ ๋ฐ›์•„์„œ ์ด๋ฅผ 16์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ถœ๋ ฅํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ๋„ 16์ง„์ˆ˜ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ft_get_ulld_hex_size ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ๋‹ค.

int print_p(va_list ap)
{
    char hex[18];
    unsigned long long address;
    int i;
    int size;

    hex[0] = '0';
    hex[1] = 'x';
    address = (unsigned long long)va_arg(ap, char *);
    size = ft_get_ulld_hex_size(address) + 2;
    i = size - 1;
    while (i >= 2)
    {
        hex[i--] = "0123456789abcdef"[address % 16];
        address /= 16;
    }
    return (write(1, hex, size));
}

๊ฒฐ๋ก 

ํ•™๊ต ์„ ๋ฐฐ๊ฐ€ ์‹ค์ œ๋กœ ์ดˆ๋ก์ƒ‰ N์‚ฌ์˜ ์ตœ์ข… ๋ฉด์ ‘์—์„œ "์‹œ์Šคํ…œ ์ฝœ์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”."๋ผ๋Š” ์งˆ๋ฌธ์„ ๋ฐ›์•˜๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋Š” ํ•ด๋‹น ๊ธฐ์—… ๋ฉด์ ‘๊ด€ ๋˜ํ•œ CS ์ง€์‹์„ ๊ฐ–์ถ˜ ์‹ ์ž…์„ ์›ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด ์งˆ๋ฌธ์— ๋Œ€ํ•ด์„œ
1. ์ œ๋Œ€๋กœ ๋‹ตํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ
2. ์šด์˜์ฒด์ œ ์ˆ˜์—… ์ง€์‹์„ ๋Œ์–ด์™€ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ
3. ์‹œ์Šคํ…œ ์ฝœ์˜ ์˜ˆ์‹œ์™€ ์ด๋ฅผ ์ง์ ‘ ๊ณ ๋ฏผํ•ด๋ณธ ๊ฒฝํ—˜์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ!

์ด 3๊ฐ€์ง€๋Š” ๋ถ„๋ช…ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๊ณ , ๋ถ„๋ช… ๋ฉด์ ‘๊ด€์—๊ฒŒ๋„ ๋งค์šฐ ๋‹ค๋ฅธ ์ธ์ƒ์„ ์ค„ ๊ฒƒ์ด๋‹ค!!


ps. ์ปด๊ณต์—์„œ ์‹œํ—˜๊ณต๋ถ€ ํ•˜๋А๋ผ ์ง€์นœ ์šฐ๋ฆฌ ๋ชจ๋‘ ํ™”์ดํŒ…!

profile
์„ธ๊ณ„๋Š” ๋‚˜์˜ ํ‘œ์ƒ

4๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2024๋…„ 10์›” 16์ผ

์•ˆ๋…•ํ•˜์„ธ์š” ์š”์ˆ ๊ณต์ฃผ ๋ฏผํ‚ค๋‹˜! ๊ธ€์— ์ •์„ฑ์ด ๊ฐ€๋“ํ•˜๊ณ , ์•„์ฃผ ๋ฉ‹์ ธ์„œ ๊ณต์ฃผ์˜ ๋ฉด๋ชจ๊ฐ€ ๋‹๋ณด์ž…๋‹ˆ๋‹ค!

์ €๋„ ๋ฆฌ๋ˆ…์Šค ์ˆ˜์—…์„ ๋“ค์œผ๋ฉด์„œ printํ•จ์ˆ˜์— ๊ถ๊ธˆ์ฆ์„ ๊ฐ–๊ณ  ํŒŒ๊ณ  ๋“ค์–ด๊ฐ€๋ฉฐ ์–ด๋–ค ์‹œ์Šคํ…œ์ฝœ์ด ์“ฐ์˜€๋Š”์ง€ ๋ถ„์„ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋Š”๋ฐ์š”โ€ฆ! ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด์‹  ๊ฒฝํ—˜์„ ๋ณด๊ณ  cs์ง€์‹์ด ๋” ํ’๋ถ€ํ•ด์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค~~

์•ž์œผ๋กœ๋„ ํฌ์ŠคํŒ… ๊ธฐ๋Œ€ํ• ๊ฒŒ์š”!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2024๋…„ 10์›” 19์ผ

์‹œ์Šคํ…œ ์ฝœ์— ๋Œ€ํ•ด ์˜›๋‚ ์— ๊ณต๋ถ€ํ•ด์„œ ๋‹ค ๊นŒ๋จน์—ˆ๋Š”๋ฐ, ๋ฏผํ‚ค๋‹˜ ๋•๋ถ„์— ๋ณต์Šต์„ ํ•˜๊ฒŒ ๋๋„ค์š”!! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2024๋…„ 10์›” 26์ผ

์š”์ˆ ๊ณต์ฃผ ๋ฏผํ‚ค๋‹˜ ์ž˜ ๋ณด๊ณ ๊ฐ‘๋‹ˆ๋‹ค
์•ž์œผ๋กœ๋„ ์“ฐ์‹ค ๊ธ€ ๊ธฐ๋Œ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2024๋…„ 10์›” 26์ผ

๊ณ ๋Œ€ ์ธ๋„์ธ๋“ค์˜ ์ „์„ค ์† ์ง€๊ตฌ ๋ชจ์–‘์ด ํฅ๋ฏธ๋กœ์›Œ์š”

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ