w3resource

C programming: Example of C custom printf() function

Implementing a custom printf() function in C.

Here is an example implementation of a custom printf() function that supports a subset of format specifiers (Character, String, Integer and Double).

Note: This implementation does not support all of the format specifiers that printf() does, and it does not implement all of the functionality of printf().

Code:

#include <stdio.h>
#include <stdarg.h>
void custom_printf(const char* format, ...) {
    va_list arg_list;
    va_start(arg_list, format);
    while (*format != '\0') {
        if (*format == '%') {
            format++;
            if (*format == 'd') {
                int val = va_arg(arg_list, int);
                printf("%d", val);
            }
            else if (*format == 's') {
                char* val = va_arg(arg_list, char*);
                printf("%s", val);
            }
            else if (*format == 'c') {
                char val = va_arg(arg_list, int);
                printf("%c", val);
            }
            else if (*format == 'f') {
                double val = va_arg(arg_list, double);
                printf("%f", val);
            }
            format++;
        }
        else {
            printf("%c", *format);
            format++;
        }
    }
    va_end(arg_list);
}
int main() {
    int x = 100;
    double d = 23.56;
    char c = 'C';
    char* str = "Custome printf() function!";
    custom_printf("Example of C custom printf() function:\n");
    custom_printf("\nCharacter: %c\n", c);
	custom_printf("String: %s\n", str);
	custom_printf("Integer: %d\n", x);
    custom_printf("Double: %f\n", d);        
    return 0;
}

Output:

Example of C custom printf() function:
Character: C
String: Custome printf() function!
Integer: 100
Double: 23.560000

This implementation uses va_list, va_start(), va_arg(), and va_end() from the header to support variable argument lists. It then uses a loop to iterate through the format string, handling each format specifier as it is encountered.



Follow us on Facebook and Twitter for latest update.