C++ Reference: Standard C++ Library reference: C Library: cstdio: vsnprintf

C++官网参考链接:https://cplusplus.com/reference/cstdio/vsnprintf/

函数 

vsnprintf
int vsnprintf (char * s, size_t n, const char * format, va_list arg );
将格式化的数据从可变实参列表写入一定大小的缓冲区 
如果在printf上使用format,将打印相同的文本组成一个字符串,但使用arg标识的可变实参列表中的元素,而不是其他函数实参,并将结果内容作为C字符串存储在s指向的缓冲区中(以n作为要填充的最大缓冲区容量)。
如果结果字符串大于n-1个字符,则丢弃剩余的字符并且不存储,但是将其计数在函数返回的值中。
在内部,该函数从arg标识的列表中获取实参,就像对它使用了va_arg一样,因此arg的状态很可能被调用改变。
在任何情况下,arg都应该在调用之前的某个时刻由a_start初始化,并期望在调用之后的某个时刻由va_end释放。

形参

指向存储生成的C字符串的缓冲区的指针。
缓冲区的大小至少应该是n个字符。
n
缓冲区中使用的最大字节数。
生成的字符串的长度最多为n-1,为附加的终止空字符留出空间。
size_t是无符号整型。
format
C字符串,包含一个格式字符串,该格式字符串遵循与printf中的format相同的规范(详细信息请参阅printf)。
arg 
标识用va_start初始化的可变实参列表的一个值。
va_list是中定义的特殊类型。

返回值
如果n足够大,则为写入的字符数,不包括终止空字符。
如果发生编码错误,则返回负数。
注意,只有当返回值非负且小于n时,字符串才被完全写入。

用例
/* vsnprintf example */
#include
#include

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来显示类似如下的错误消息:

C++ Reference: Standard C++ Library reference: C Library: cstdio: vsnprintf_第1张图片

另请参考
vfprintf    Write formatted data from variable argument list to stream (function)
vprintf    Print formatted data from variable argument list to stdout (function)
sprintf    Write formatted data to string (function)
printf    Print formatted data to stdout (function) 

你可能感兴趣的:(C++,Reference,C,Library,c++,c语言,vsnprintf)