可变参数的实现my_sprintf
#include "stdafx.h" #include <stdio.h> #include <stdarg.h> void my_sprintf(char *str, char *fomat, ...) { char *p = fomat; char *q; char ch; int i = 0; va_list ptr, l_ptr;//实际上是一个char*指针 va_start(ptr, fomat);//ptr指向第一个变参 vprintf(fomat, ptr); vsprintf(str, fomat, ptr); l_ptr = ptr; while (*p != '\0')//数据解析范例va_arg的使用 { while (*p != '%'&&*p != '\0'){ ++p; } ++p; if (*(p) == 'd') { int a = va_arg(l_ptr, int);//l_ptr指向下一个变参 printf("%d", a); } else if (*(p) == 's') { q = va_arg(l_ptr, char*); printf("%s", q); } else if (*(p) == 'c') { ch = va_arg(l_ptr, char); printf("%c", ch); } } va_end(ptr);//复位指针 } int _tmain(int argc, _TCHAR* argv[]) { char str[100]; my_sprintf(str, "%d%c%d%s \n", 25, 'b', 58, "hello"); printf("%s", str); return 0; }