#include<stdarg.h>//va_xxx都在此函数库中
//参数中就有固定参数str和可变参数(用”…”表示)
void my_printf(char *str, ...)
{
//是用宏定义的标识符,是指向字符类型的指针
va_list arg;
//取出va_list定义的变量的地址,并加上可变元素的数目 实际指向的是那个 后边的可变参数列表
va_start(arg, str);
int ch = 0;
char *pstr = NULL;
while (*str)
{
if (*str == '%')
{
str++;
switch (*str)
{
case 'c':
{
//va_arg(ap, t) 每次取指针指向的内容,并在宏的内部将指针后移
ch = va_arg(arg, char);
putchar(ch);
break;
}
case 's':
{
pstr = va_arg(arg, char*);
while (*pstr)
{
putchar(*pstr);
pstr++;
}
break;
}
default:
putchar(*(str - 1));
putchar(*str);
}
str++;
}
else
{
putchar(*str);
str++;
}
}
//将原指针指向空,以防止野指针的出现
va_end(arg);
}
int main()
{
//char a[30] = "We are fameliy";
//TestSwap(a, 14);
//ReverseString();
char s[] = "hello world";
my_printf("%s\n", s);
system("pause");
return 0;
}
C语言拾遗--myprintf
最新推荐文章于 2023-03-15 12:52:25 发布