42bangkok-ft_printf
42bangkok-ft_printf copied to clipboard
my own printf
ft_printf
42cursus' project
The printf function is one of the most versatile and well-known functions in the C language.From a testing aid to tabulation method, printf is a very powerful and important tool in everydev's kit. This project aims to recreate the behaviour of the original MacOS's printf, includingits basic error management, some of its flags, minimum field width stipulation and most of itsbasic conversions.
Features
- Passed 3 tester
- Sanatana Tester
- Tripouille Tester
- Mazoise Tester (Optional) -- to join Kitty Club
- Support Linux and Mac environment
- Cover all bonus flag and
*flag
Subject
Write a lib with ft_printf function that will mimic the real printf
Allow Function
malloc(), free(), write(), va_start(), va_arg(), va_copy(), va_end()
Mandatory
A small description of the required conversion:
%cprint a single character.%sprint a string of characters.%pThe void * pointer argument is printed in hexadecimal.%dprint a decimal (base 10) number.%iprint an integer in base 10.%uprint an unsigned decimal (base 10) number.%xprint a number in hexadecimal (base 16).%%print a percent sign.
Bonus
Manage any combination of the following flags:
-0.and minimum field width with all conversions- Manage all the following flags:
# +(yes, one of them is a space)
What is ft_printf?
This project is about recoding the famous printf C function to learn variadic functions and improve algorithmic methodology.
int ft_printf(const char * (restrict) format, ...);
ft_printf can print different contents depending on conversions and flags. You can print using the following syntax:
%[flag][min-width].[precision][length modifier][conversion specifier]
min-width depending on cases, will add empty spaces. Precision, depending on cases, will add '0'.
See below what are flags, length modifier and conversions.
Conversions & Flags & Expected Order
| Conversion | Description | Project |
|---|---|---|
| c | Single ascii character | Mandatory |
| s | String of characters NULL terminated | Mandatory |
| p | Pointer location converted to hexadecimal value | Mandatory |
| d | Decimal number | Mandatory |
| i | Integer in decimal base | Mandatory |
| u | Unsigned integer in decimal base | Mandatory |
| x | Unsigned number printed in lowercase hexadecimal base | Mandatory |
| X | Unsigned number printed in uppercase hexadecimal base | Mandatory |
| % | The '%' ascii character | Mandatory |
| o | Unsigned number printed in octal base | Extra |
| Flag | Description | Project |
|---|---|---|
| - | Left align the argument passed | Bonus 1 |
| 0 | Add '0' as a padding character in numeric conversions (single space is default) | Bonus 1 |
| . | Precision definition, followed by a number | Bonus 1 |
| + | Add a plus sign ('+') in the front of positive numeric conversions | Bonus 2 |
| ' ' | Add a single space (' ') in the front of positive numeric conversions | Bonus 2 |
| # | Add the corresponding prefix in front of x, X and o conversions | Bonus 2 |
| * | Add a placeholder for numeric values that shall be passed through the variadic arguments | Extra |
| Holder key | Prefix and justification flags * | Minimum Width * | Precision * | Conversion |
|---|---|---|---|---|
% |
- , 0 , + , ... |
10, 5 , ... |
., .10, .5, ... |
c, d, i, s, ... |
* : optional flags and definitions
Usage
You can try our project with the following commands:
First, clone the repository
git clone https://github.com/viruskizz/42bangkok-ft_printf
cd ft_printf
make
Algorithm and Concept
My concept printf is write read character ordering and grab %. write a normal character and coverting placeholder format to write coverted string.
Discovery this sheet to understand more about printf using case.
Implementation
- Read character in ordering
ft_printf.c
- Check and set formatter string as
t_formatformat_utils.c
- Write a character is not found
formatwrite(1, &c, 1)
- Convert format to converted string (
cstr)conversion_type.cconversion_flag.cconversion_pcs.cconversion_width.c
- Write
cstrwithprint_strorprint_charft_printf_utils.c
- Shift read cursur equal format string length
- Continue to read next character (to step 1)
Conversion type
conversion_cconversion_dconversion_pconversion_sconversion_uconversion_x
Credit
README Inspiration: