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