vsprintf
/* 函数名: vsprintf 功 能: 送格式化输出到串中 返回值: 正常情况下返回生成字串的长度(除去/0),错误情况返回负值 用 法: int vsprintf(char *string, char *format, va_list param); 注: 该函数会出现内存溢出情况,建议使用vsnprintf 程序例: */ #include <stdarg.h> char buffer[80]; int vspf(char *fmt, ...) { va_list argptr; int cnt; va_start(argptr, fmt); cnt = vsprintf(buffer, fmt, argptr); va_end(argptr); return(cnt); } int main(void) { int inumber = 30; float fnumber = 90.0; char string[4] = "abc"; vspf("%d %f %s", inumber, fnumber, string); printf("%s/n", buffer); return 0; } 该程序结果为 30 90.000000 abc VA_LIST的用法( VA_LIST 是在C语言中解决变参问题的一组宏): (1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针 (2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,这个宏的第二个 参数是第一个可变参数的前一个参数,是一个固定的参数。(如在运行VA_START (ap,v)以后,ap指向第一个可变参数在堆栈的地址。) (3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型。 (4)最后用VA_END宏结束可变参数的获取。然后你就可以在函数里使用第二个参数了。 如果函数有多个可变参数的,依次调用VA_ARG获取各个参数。
_vsnprintf
头文件: #include <stdarg.h> 函数声明: int _vsnprintf(char *buffer, size_t max_count, const char *format, va_list vArgList); 参数说明: 1. char *buffer [out],把生成的格式化的字符串存放在这里. 2. size_t max_count [in], buffer可接受的最大字节数,防止产生数组越界. 3. const char *format [in], 格式化字符串 4. va_list vArgList [in], va_list变量. va:variable-argument:可变参数 用法类似于vsprintf,只不过加了max_count的限制. 返回值说明: 如果成功调用此函数,返回写到buffer中的字符的个数(不包括结尾的'/0')。snprintf和vsnprintf函数不能够写多于size大小(包括结尾的'0')的字节数。如果输出因为以上原因被截断,返回成功写入buffer的字符数(不包括结尾的'/0'),如果有足够的内存空间的话。所以,如果返回值等于size或者大于size,表示输出到buffer的字符被截断,如果输出过程中遇到错误,则返回一个负数。