windows下zlog输出日志长度只能在1024下解决方法

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的时候,申请内存和释放内存,只到得到合适的内存空间即可。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值