Home C&C++函数库 c++ 语法 程序源码 Linux C库


vsnprintf

函数  <cstdio>

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都应该在调用之前的某个点被va_start初始化,并且它应该在调用之后的某个点被va_end释放。

☲  参数



s
指向存储C-string结果的缓冲区的指针。
缓冲区的大小至少应为n个字符。

n
缓冲区中使用的最大字节数。
生成的字符串长度最多为n-1,为额外的终止空字符留出空间。
Size_t是一个无符号整型。

format
C字符串,包含一个格式字符串,该格式字符串遵循与printf格式相同的规范(请参阅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


🍄  另请参阅



vfprintf 将格式化的数据从变量参数列表写入流(function )
printf 将格式化的数据写入stdout(function )
sprintf 将格式化的数据写入字符串(function )
vprintf 将格式化的数据打印到标准输出(function )

联系我们 免责声明 关于CandCplus 网站地图