请问下vsnprintf和snprintf的区别是什么呢?

SNAIL_RUN 2010-08-01 07:38:22
从定义上来看,两者就区别在于va_list的解决变参问题的一组宏,能否给举个具体的实例呢?

int snprintf(char *str, size_t size, const char *format, ...);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);


比如下面这段代码为什么一个用snprintf,一个用vsnprinf呢?
static void
err_doit(int errnoflag, int level, const char *fmt, va_list ap)
{
int errno_save, n;
char buf[MAXLINE + 1];

errno_save = errno; /* value caller might want printed */
#ifdef HAVE_VSNPRINTF
vsnprintf(buf, MAXLINE, fmt, ap); /* safe MAXLINE define in unp.c*/
#else
vsprintf(buf, fmt, ap); /* not safe */
#endif
n = strlen(buf);
if (errnoflag)
snprintf(buf + n, MAXLINE - n, ": %s", strerror(errno_save));
strcat(buf, "\n");

if (daemon_proc) {
syslog(level, buf);
} else {
fflush(stdout); /* in case stdout and stderr are the same */
fputs(buf, stderr);
fflush(stderr);
}
return;
}
...全文
989 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2010-08-01
  • 打赏
  • 举报
回复
sprintf和vsprintf的区别,一个道理
ayw215 2010-08-01
  • 打赏
  • 举报
回复
int snprintf(char *str, size_t size, const char *format, ...);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);

=
区别大了
snprintf里面可以使用变参
vsnprintf几乎不会被直接使用,而是在不定参数的函数内部调用

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧