词条 | _vsnprintf |
释义 | _vsnprintf,C语言库函数之一,属于可变参数。用于像字符串中打印数据、数据格式用户自定义。 函数简介头文件: #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的字符被截断,如果输出过程中遇到错误,则返回一个负数。 用法实例int mon_log(char* format, ...) { va_list vArgList; //定义一个va_list型的变量,这个变量是指向参数的指针. va_start(vArgList, format); //用va_start宏初始化变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数. _vsnprintf(str_tmp, 3, format, vArgList); //注意,不要漏掉前面的_ va_end(vArgList); //用va_end宏结束可变参数的获取 return 0; } //调用上面的函数 mon_log("%d,%d,%d,%d", 1,2,3,4); 返回值用法: #include <stdio.h> #include <stdlib.h> #include <stdarg.h> char * make_message(const char *fmt, ...) { /* 初始时假设我们只需要不超过100字节大小的空间 */ int n, size = 100; char *p; va_list ap; if ((p = (char *)malloc(size)) == NULL) return NULL; while (1) { /* 尝试在申请的空间中进行打印操作 */ va_start(ap, fmt); n = vsnprintf (p, size, fmt, ap); va_end(ap); /* 如果vsnprintf调用成功,返回该字符串 */ if (n > -1 && n < size) return p; /* vsnprintf调用失败(n<0)或者p的空间不足够容纳size大小的字符串(n>=size),尝试申请更大的空间*/ size *= 2; /* 两倍原来大小的空间 */ if ((p = (char *)realloc(p, size)) == NULL) return NULL; } } int main() { /* 调用上面的函数 */ char* str = make_message("%d,%d,%d,%d",5,6,7,8); printf("%s\",str); return 0; } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。