windows版本:https://github.com/lopsd07/WinZlog
在windows下面有个问题不能打印1024及以上长度的字符。
主要问题在于:buf.c中243行左右,nwrite = vsnprintf(a_buf->tail, size_left, format, ap);
在linux下面,当数据ap的长度大于size_left(缓冲区的大小)的长度的时候,返回的是实际字符的长度,而在windows下面,实际的长度超过了size_left的时候,就会返回-1,表示超出缓冲区的长度。
这样在后面的nwrite的判断里面就会出错。
可以做如下的修改:
#define BUFFER_INTREVAL 1024
#ifdef _MSC_VER
if (nwrite < 0 && a_buf->size_max > 0) {
for (int buffer_size = size_left + BUFFER_INTREVAL; buffer_size <= a_buf->size_max;)
{
char *buffer = malloc(buffer_size);
if (buffer == NULL) {
break;
}
if ((nwrite = vsnprintf(buffer, buffer_size, format, ap)) >= 0)
{
free(buffer);
buffer = NULL;
break;
}
buffer_size += BUFFER_INTREVAL;
free(buffer);
buffer = NULL;
}
}
#endif
可以定义一个1024的长度增长空间,然后通过返回-1的时候,申请内存和释放内存,只到得到合适的内存空间即可。