_vsnprintf是C語言庫函式之一,屬於可變參數。用於向字元串中列印數據、數據格式用戶自定義。頭檔案是#include <stdarg.h>。
基本介紹
- 中文名:_vsnprintf
- 類型:C語言庫函式之一
- 隸屬:可變參數
- 作用:向字元串中列印數據等
函式簡介
參數說明
- char *str [out],把生成的格式化的字元串存放在這裡.
- size_t size [in], str可接受的最大字元數(非位元組數,UNICODE一個字元兩個位元組),防止產生數組越界.
- const char *format [in], 指定輸出格式的字元串,它決定了你需要提供的可變參數的類型、個數和順序。
- va_list ap [in], va_list變數. va:variable-argument:可變參數
用法實例
#include <stdio.h>#include <stdarg.h>int mon_log(char* format, ...){char str_tmp[50];int i=0;va_list vArgList; //定義一個va_list型的變數,這個變數是指向參數的指針.va_start (vArgList, format); //用va_start宏初始化變數,這個宏的第二個參數是第一個可變參數的前一個參數,是一個固定的參數i=_vsnprintf(str_tmp, 50, format, vArgList); //注意,不要漏掉前面的_va_end(vArgList); //用va_end宏結束可變參數的獲取return i; //返回參數的字元個數中間有逗號間隔}//調用上面的函式void main() { int i=mon_log("%s,%d,%d,%d","asd",2,3,4); printf("%d\n",i);}
返回值用法
#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*sizeof(char))) == 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*sizeof(char))) == NULL) return NULL; }}int main() { /* 調用上面的函式 */ char* str = make_message("%d,%d,%d,%d",5,6,7,8); printf("%s\n",str); free(str); /* we allocate the memory in the make_message function, so we should release it by caller(main function). */ return 0;}