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
|
🍄 另请参阅