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

本文探讨了在Windows环境下打印超过1024字符的问题,并提供了解决方案。主要针对vsnprintf函数在不同操作系统下的表现差异进行讨论,通过动态增加缓冲区大小的方式解决了打印过长字符串时的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值