可变参数字符串格式化
#include <iostream> #include <stdarg.h> using namespace std; int sum(char * msg, ...); int my_vsprintf(char *buf, char *format, ...); int main() { sum("The sum of the list is:", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0); cout << endl; char buf[256]; my_vsprintf(buf, "%My name is %s and I am %d years old.", "Ben", 24); cout << buf << endl; system("pause"); return 0; } int sum(char *msg, ...) { va_list st; va_start(st, msg); int total = 0; int tmp; while((tmp = va_arg(st, int)) != 0) { total += tmp; } va_end(st); cout << "The sum of the list is: " << total; return 0; } int my_vsprintf(char *buf, char *format, ...) { va_list st; va_start(st, format); vsprintf(buf, format, st); /***************************************************************************/ /* 函数名: vsprintf /* 功 能: 送格式化输出到串中 /* 返回值: 正常情况下返回生成字串的长度(除去\0),错误情况返回负值 /* 用 法: int vsprintf(char *string, char *format, va_list param); /* 将param 按格式format写入字符串string中 /* 注: 该函数会出现内存溢出情况,建议使用vsnprintf */ /***************************************************************************/ va_end(st); return 0; }