模拟实现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;}
阅读全文
0 0
- 模拟实现printf函数,完成函数调用
- 模拟实现 printf 函数
- 模拟实现printf函数
- 模拟实现printf函数
- 简单模拟实现printf函数
- printf函数的简单模拟实现
- 模拟实现printf函数(可变参数)
- 用可变参数列表模拟实现printf函数
- 模拟实现printf函数,可变参数列表实例
- printf函数实现
- 如何实现printf函数
- 实现printf函数
- printf函数实现
- printf函数实现原理
- printf函数实现原理
- 自己实现printf函数
- 简单实现printf函数
- printf函数源码实现
- ionic侧拉菜单
- spring的三种实例化方式
- SVN密码忘记了怎么找回
- react native 之 webstorm开发(windows)
- oracle学习
- 模拟实现printf函数,完成函数调用
- 持续集成/发布-自动部署
- ionic滚动条
- imageloader的使用
- 案列:抓取基金网站JS形式的数据
- 对Ajax的理解
- ExoPlayer的使用之自定义UI界面
- 作为面试官
- ES6-数组的扩展-Array.of()