_vsnprintf

_vsnprintf

_vsnprintf是C語言庫函式之一,屬於可變參數。用於向字元串中列印數據、數據格式用戶自定義。頭檔案是#include <stdarg.h>。

基本介紹

  • 中文名:_vsnprintf 
  • 類型C語言庫函式之一
  • 隸屬:可變參數
  • 作用:向字元串中列印數據等
函式簡介,參數說明,用法實例,返回值用法,

函式簡介

頭檔案:
#include <stdarg.h>
函式聲明:
int _vsnprintf(char* str, size_t size, const char* format, va_list ap);

參數說明

  1. char *str [out],把生成的格式化的字元串存放在這裡.
  2. size_t size [in], str可接受的最大字元數(非位元組數,UNICODE一個字元兩個位元組),防止產生數組越界.
  3. const char *format [in], 指定輸出格式的字元串,它決定了你需要提供的可變參數的類型、個數和順序。
  4. va_list ap [in], va_list變數. va:variable-argument:可變參數
函式功能:將可變參數格式化輸出到一個字元數組。
用法類似於vsprintf,不過加了size的限制,防止了記憶體溢出(size為str所指的存儲空間的大小)。
返回值:執行成功,返回最終生成字元串的長度,若生成字元串的長度大於size,則將字元串的前size個字元複製到str,同時將原串的長度返回(不包含終止符);執行失敗,返回負值,並置errno.
備註:
linux環境下是:vsnprintf
VC6環境下是:_vsnprintf

用法實例

#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);}
輸出 9。
asd,2,3,4
123456789 (共9個字元,間隔符逗號計算在內)

返回值用法

#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;}

相關詞條

熱門詞條

聯絡我們