gpt4 book ai didi

c - nRF52840 上 va_start() 的省略号问题

转载 作者:行者123 更新时间:2023-11-30 14:46:52 29 4
gpt4 key购买 nike

我想使用 va_start 从省略号中检索我的参数。

这是我的代码:

char str[256];
void nrf_log_flash(bool is_to_save, char * log, ...){
va_list args;
va_start(args, log);
int ret = vsprintf(str, log, args);
if(is_to_save){
sprintf(str, "%s : %s\n", nrf_cal_get_time_string(false), log);
//my_nrf_log_add(str, strlen(str));
}
NRF_LOG_INFO("%s", log);
NRF_LOG_INFO("%s", str);
NRF_LOG_INFO("%d", ret);
va_end(args);

}

这是我的使命:

nrf_log_flash(true, "button %d pressed, %u, %x, %c", 2, 3658, 0xca, 'a');

但是我的 va_list 是空的。我做错了什么?

最佳答案

行后

int ret = vsprintf(str, log, args);

你的str变量包含格式化的字符串(例如str是“button 2按下,3658,ca,a”。但是,你的下一句会覆盖这个数据。当你调用sprintf时,并用'log覆盖str中的数据' 变量,格式为(“按钮 %d 按下,%u,%x,%c”)

if(is_to_save){
//THIS CODE OVERWRITE YOUR STR BUFFER
sprintf(str, "%s : %s\n", nrf_cal_get_time_string(false), log);
//my_nrf_log_add(str, strlen(str));
}

顺便说一句,建议使用 snprint 和 vsnprintf 以避免缓冲区溢出。由于格式中包含'%s',因此可能会打印出大于256字节的大字符串。

关于c - nRF52840 上 va_start() 的省略号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51874210/

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