首页 > 编程知识 正文

snprintf_s函数的用法,printf函数源码

时间:2023-05-05 01:28:59 阅读:169663 作者:3736

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 ); }运行结果

分析:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。