编写一个类似于sprintf的函数,与sprintf不同的是,参数多了一个等级参数,为unsigned char 型。
代码如下:
#include <stdio.h>
#include<stdarg.h>
int my_sprintf(const unsigned char level,const char *format,...)
{
char my_dat[256]={0};
char my_buf[200]={0};
va_list my_ap; //定义参数指针,获取可选参数
va_start(my_ap,format); //初始化参数指针,将ap指向第一个实际参数的地址
vsprintf(my_buf,format,my_ap);
printf("my_buf = %s\n",my_buf);
sprintf(my_dat,"level = %d :buf = %s",level,my_buf);
printf("%s\n",my_dat);
va_end(my_ap); //不再使用参数指针,或者需要重新初始化参数指针时,必须先调用va_end宏
}
int main()
{
my_sprintf(1,"hello");
my_sprintf(2,"%d-%d-%s-%f-%c",100,200,"word",2.0123,'c');
}
结果:
my_buf = hello
level = 1 :buf = hello
my_buf = 100-200-word-2.012300-c
level = 2 :buf = 100-200-word-2.012300-c