简单的print函数的实现

今天写一个自己的printf函数,练练手,比较简单,只写了%c,%d,%s。这三个类型。各位大神可以针对我的问题指点指点哈。

主要用到可变参数列表。在这我不详解,有兴趣问度娘。废话不说,代码献上!

#include <stdarg.h>
#include <stdio.h>  
#include <stdlib.h>  

int my_printf(const char *fmt, ...) 
{
    va_list args;            //创建一个指向未知参数列表的指针
    va_start(args, fmt);       //初始化args为未知参数列表的第一个参数的地址
    const char *str = fmt;      

    while (*str != '\0')         //循环遍历格式字符串 
    {                        

            switch (*str) 
            {
            case 'd':                       //整形
            {                      
                          int val = va_arg(args, int);        //va_arg可以根据第二个参数在未知参数列表中获取一个参数
                          char res[16] = { 0 };               //va_arg在获取一个参数之后,会让arg向后移动,指向下一个未知参数
                          _itoa_s(val, res, 10);
                          fputs(res, stdout);
                          break;
            }
            case 'c': {                     //字符型  
                          char ch = va_arg(args, char);
                          putc(ch, stdout);
                          break;
            }
            case 's': {                     //字符串型
                          char *res = va_arg(args, char*);
                          fputs(res, stdout);
                          break;
            }
            }
            ++str;
        }

    va_end(args);
    return 0;
}
int   main(void)
 {
        int i = 100;
        char c = 'b';
        char d = 'i';
        char e = 't';
        char *str = "hello";
        my_printf(" %s , %c , %c , %c , %d", str, c, d, e, i);
        system("pause");
        return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40421919/article/details/80212160
今日推荐