stdio库中的printf的函数原型:
int printf( const char *format, … ); // 函数的返回值为int, 表示正确输出的参数个数;
const char * frm
frm指针指向的内容为常量,不可以更改
char * const frm
frm的地址为常量不可更改,指向的内容可更改;
简版printf函数 实现思路
借助putchar函数,实现从0到1 的转变.学习重要的是学习思维
-
my_printf函数代码
#include <stdio.h> int my_printf(const char *frm, ...){ int cnt = 0; #define PUTC(a) putchar(a),++cnt for (int i = 0; frm[i]; i++) { //字符串末尾隐藏'\0',ASCII为0; // putchar(frm[i]), cnt++; PUTC(frm[i]); } return cnt;//cnt代表成功打印字符的个数; }
-
完成第一个工能,可以打印字符串了
功能完善改进
- 变量值的解析(如何根据格式控制符和变参打印)
int my_printf(const char *frm, ...){ int cnt = 0; va_list arg; va_start(arg, frm);//用va宏去取参数 #define PUTC(a) putchar(a),++cnt for (int i = 0; frm[i]; i++) { //字符串末尾隐藏'\0',ASCII为0; // putchar(frm[i]), cnt++; PUTC(frm[i]); } #undef PUTC va_end(arg);//废品回收 return cnt;//cnt代表成功打印字符的个数; }
-
首先利用va可以获得后面变参列表的参数
-
然后我们对frm里面的字符进行判断
#include <stdarg.h> int my_printf(const char *frm, ...){ int cnt = 0; va_list arg; va_start(arg, frm);//用va宏去取参数 #define PUTC(a) putchar(a), +cnt for (int i = 0; frm[i
-