函式
<cstdio>

vsnprintf

int vsnprintf (char * s, size_t n, const char * format, va_list arg );
將可變引數列表中的格式化資料寫入指定大小的緩衝區
它會組合一個字串,其文字與使用 formatprintf 上列印的文字相同,但是它使用由 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 中的 format 相同的規範(詳見 printf)。
arg
一個標識由 va_start 初始化的可變引數列表的值。
va_list 是在 <cstdarg> 中定義的特殊型別。

返回值

如果 n 足夠大,本應寫入的字元數,不包括結尾的空字元
如果發生編碼錯誤,則返回一個負數。
請注意,只有當此返回值非負且小於 n 時,字串才被完全寫入。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* 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


另見