vsnprintf用法解析

int vsnprintf (char * s, size_t n, const char * format, va_list arg );

描述:

將格式化數據從可變參數列表寫入大小緩衝區
如果在printf上使用格式,則使用相同的文本組成字符串,但使用由arg標識的變量參數列表中的元素而不是附加的函數參數,

並將結果內容作爲C字符串存儲在s指向的緩衝區中 (以n爲最大緩衝區容量來填充)。

如果結果字符串的長度超過了n-1個字符,則剩餘的字符將被丟棄並且不被存儲,而是被計算爲函數返回的值。
在內部,函數從arg標識的列表中檢索參數,就好像va_arg被使用了一樣,因此arg的狀態很可能被調用所改變。
在任何情況下,arg都應該在調用之前的某個時刻由va_start初始化,並且在調用之後的某個時刻,預計會由va_end釋放。

參數:

s

指向存儲結果C字符串的緩衝區的指針。
緩衝區應至少有n個字符的大小。

n

在緩衝區中使用的最大字節數。
生成的字符串的長度至多爲n-1,爲額外的終止空字符留下空間。
size_t是一個無符號整數類型。

format

包含格式字符串的C字符串,其格式字符串與printf中的格式相同

arg

標識使用va_start初始化的變量參數列表的值。
va_list是在<cstdarg>中定義的特殊類型。

返回值:

如果n足夠大,則會寫入的字符數,不包括終止空字符。
如果發生編碼錯誤,則返回負數。
注意,只有當這個返回值是非負值且小於n時,字符串才被完全寫入。

/* vsnprintf example */
#include <stdio.h>
#include <stdarg.h>

void PrintFError ( const char * format, ... )
{
  char buffer[256];
  va_list args;
  va_start (args, format);
  vsnprintf (buffer,256,format, args);
  perror (buffer);
  va_end (args);
}

int main ()
{
   FILE * pFile;
   char szFileName[]="myfile.txt";

   pFile = fopen (szFileName,"r");
   if (pFile == NULL)
     PrintFError ("Error opening '%s'",szFileName);
   else
   {
     // file successfully open
     fclose (pFile);
   }
   return 0;
}
在這個例子中,如果文件myfile.txt不存在,則調用perror以顯示類似於以下內容的錯誤消息:
Error opening file 'myfile.txt': No such file or directory

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章