模拟实现printf函数,完成函数调用

来源:互联网 发布:1钻淘宝店铺转让 编辑:程序博客网 时间:2024/06/04 19:01

通过函数原型可以看出printf函数其实是一个可变参数函数,在printf函数中只需要知道传入函数的第一个参数,就可以根据该参数在栈中的存储位置获取后面参数的位置及信息了。

printf函数第一个参数const cahr *format,该字符串内包含并确定了后面参数的输出格式,比如"%c","%d","%d","%x"等等。

printf函数返回值,就是通过该函数打印到标准输出流(屏幕)的字符串,出错的话就返回一个负数。

下面自己模拟一下printf函数来感受感受。

基本思路是:利用传入的第一个参数,也就是字符串。通过对字符串的遍历,若该字符为‘%’,则对它后面的字符进行判断是否是规范化输出要求的字符(比如'c','d','s',‘f’'等等),然后利用va_arg(ap,t);获取后面参数中参数所对应的信息,并输出;若不为'%',则输出该字符。同时在上述两种情况下,都需要对所打印的字符个数进行统计(包括输出数值所对应的数字的个数)。

#include <stdio.h>#include <windows.h>  #include <assert.h>   int myprintf(const char *format, ...){assert(format);va_list arg;va_start(arg, format);while (*format){if (*format == '%'){format++;switch (*format){case's':{char *s = va_arg(arg,char*);while (*s){puts(s);}}break;case'c':{char c = va_arg(arg, char);putchar(c);}break;case'%':{putchar('%');}break;default:puts("format error!\n");return ;}}else if (*format == '\\'){}else{putchar(*format);}format++;}va_end(arg);return 0;}int main(){char c = 'c';char *s = "hello word";    myprintf("hello %c,hello %s\n", c, s);system("pause");return 0;}




原创粉丝点击