Open
Description
vsnprintf用法貌似不对
#include <stdio.h>
#include <stdarg.h>
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
- 如果输出的字符串长度小于 size,返回实际写入的字符数(不包括字符串结束符 '\0')。
- 如果输出的字符串长度大于等于 size,返回如果有足够空间时本应写入的字符数(不包括字符串结束符 '\0')。这意味着返回值可能会大于 size - 1。
hlog.c下面这段代码没有考虑第二种长度超出size的情况,造成len+=..后len值错误
case 's':
{
va_list ap;
va_start(ap, fmt);
len += vsnprintf(buf + len, bufsize - len, fmt, ap);
va_end(ap);
}
Metadata
Metadata
Assignees
Labels
No labels