intvsnprintf(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是无符号整数类型。
格式
包含格式字符串的c字符串。 格式字符串与printf的格式相同
arg
用于标识使用va_start初始化的变量参数列表的值。
va_list是在中定义的特殊类型。
返回值:
如果n足够大,则写入的字符数。 不包含结尾的空白字符。
如果发生编码错误,则返回负数。
请注意,仅当此返回值不为负且小于n时,才能完全写入字符串。
参考例
# include stdio.h # include stdarg.h # define maxlen 10 int mon _ log (char * format,) { char str_tmp[MAXLEN]; int i=0,j=0; va_list vArgList; va_start(Varglist,format ); I=vsnprintf(str_tmp,MAXLEN,format,vArgList ); va_end(vArglist; printf('%s”,str_tmp; for(j=0; jMAXLEN; j () printf('%d ',str_tmp[j] ); }printf((n ); return i; }void main () intI=mon_log )、%s、%d、%d、%c、' abc '、2、3、'n ' ); printf(%d(n ),I ); }运行结果
分析: