繁体   English   中英

c++ 将 const char* 转换为 char* 用于长缓冲区

[英]c++ converting const char* to char* for long buffer

我有一个旧的 function,我无法更改 API

void TraceMsg(const char* fmt, ...)
{
    if (!m_MessageFunctions[TraceLevel]) return;

    char msgBuffer[MAX_LOG_MSG];
    va_list argList;
    va_start(argList, fmt);
    vsnprintf(msgBuffer, MAX_LOG_MSG, fmt, argList);
    va_end(argList);

    m_MessageFunctions[TraceLevel](msgBuffer);
}

MAX_LOG_MSG = 2048

我进入了一个阶段,我想以动态方式为记录器的消息分配更多空间

我看过这篇文章: https://code-examples.net/en/q/4904e5
并将我的代码更改为:

void TraceMsg(const char* fmt, ...)
{
    if (!m_MessageFunctions[TraceLevel]) return;

    va_list argList;
    va_start(argList, fmt);
    size_t size = vsnprintf(NULL, 0,fmt, argList);
    char* msgBuffer = new char[size];

    vsnprintf(msgBuffer, size, fmt, argList);
    va_end(argList);
    m_MessageFunctions[TraceLevel](msgBuffer);
    delete[] msgBuffer;
}

我怎么会得到像这样的怪异角色

2022-05-03 12:13:20,939 INFO  Make graph edge Bayer@LSC_1_2 ->Input@DeMux_LSC§§§§н
2022-05-03 12:13:20,939 INFO  Make graph edge Bayer@RGB_IR_2_0 ->0@Mux_X2B_BP§§§§нннннњйн‚€нннннннннннннннннннннннннннннннннннн

你能帮忙吗?

vsnprintf的返回值为

如果 n 足够大,将写入的字符数,不包括终止的 null 字符

因此,您需要为此加 1 以便为 null 终结符腾出空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM