gpt4 book ai didi

c - 如何确定通用记录器函数的 char * 的长度?

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:40 24 4
gpt4 key购买 nike

我正在为固件原型(prototype)编写一个可重用的日志记录模块。我有一个记录器 api,它有一个包装函数 void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)

在这个包装函数中,系统特定的写入函数被调用。例如,可以是 UART,或显示驱动程序...

尽管如此,所有系统写入/传输功能都需要以字节为单位的消息长度。而我的包装函数只得到一个 char * 到它应该发送的消息。例如,请参见此处,我的包装器调用系统 UART 传输函数:

void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
{

UARTDRV_Transmit(handle, char * msg, int msglen);
}

我如何推导出任何消息的长度,以便将其正确传递给底层传输函数?

我不想使用大型库,因为我在 uC 上并且想节省空间。

最佳答案

解决问题的不同方法:

使用 strlen计算长度

void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
{
UARTDRV_Transmit(handle, msg, strlen(msg));
}

或者遍历 直到空终止符

void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
{
while (*msg != '\0')
UARTDRV_Transmit(handle, msg++, 1);
}

或者在没有strlen的情况下结合上面的解决方案计算msg长度

void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
{
int msg_length = 0;

while (*msg++ != '\0')
msg_length++;

if (msg_length > 0)
UARTDRV_Transmit(handle, msg, msg_length);
}

关于c - 如何确定通用记录器函数的 char * 的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39849007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com