如何避免 uint8_t 数据类型的 sprintf 警告
How to avoid sprintf warning for uint8_t data type
我的问题基于以下片段:
[line1] #include <stdio.h>
.
.
.
[line123] uint8_t msg[100];
[line124] memset(msg,0,sizeof(msg));
[line125] sprintf(msg,"SYSCLK : %ld\r\n",HAL_RCC_GetSysClockFreq());
[line126] HAL_UART_Transmit(&huart2,msg,strlen(msg),HAL_MAX_DELAY);
.
.
.
[line130] char msg1[100];
[line131] memset(msg1,0,sizeof(msg1));
[line132] sprintf(msg1,"SYSCLK : %ldHz\r\n",HAL_RCC_GetSysClockFreq());
[line133] HAL_UART_Transmit(&huart2,(uint8_t*)msg1,strlen(msg1),HAL_MAX_DELAY);
为什么第 125 行会收到警告:“ passing argument 1 of 'sprintf'
来自不兼容的指针类型“
参考String Format Specifiers,我知道...
- h是一个长度修饰符,适用于无符号短参数,
- hh 到无符号字符,并且
- z 到 size_t
...但是怀疑第 132 行的 %ldHz 是什么意思,为什么这条线没有收到警告?
谢谢。
Hz
不是格式说明符的一部分:它只是在频率值之后打印 "Hertz" 的标准缩写。因此,实际的格式说明符只是 %ld
,以十进制格式打印一个长整数。
sprintf
的第一个参数是 char *
。您正在传递 uint8_t *
(即 unsigned char *
)。那是指针类型不匹配。
- 实际的格式说明符是
%ld
。后面的 Hz
只是打印的文字。
Why does line 125 get a warning: " passing argument 1 of 'sprintf' from incompatible pointer type
uint8_t
不一定直接兼容 char
- 后者具有实现定义的签名。然而,uint8_t
可以安全地转换为 to/from char
,因此您可以尝试使用 (char*)msg
进行转换,看看是否能解决问题。
What does C print format specifier ' %ldHz ' mean?
类型 long
的格式说明符是 %ld
,Hz
是输出字符串(赫兹)的一部分。
我的问题基于以下片段:
[line1] #include <stdio.h>
.
.
.
[line123] uint8_t msg[100];
[line124] memset(msg,0,sizeof(msg));
[line125] sprintf(msg,"SYSCLK : %ld\r\n",HAL_RCC_GetSysClockFreq());
[line126] HAL_UART_Transmit(&huart2,msg,strlen(msg),HAL_MAX_DELAY);
.
.
.
[line130] char msg1[100];
[line131] memset(msg1,0,sizeof(msg1));
[line132] sprintf(msg1,"SYSCLK : %ldHz\r\n",HAL_RCC_GetSysClockFreq());
[line133] HAL_UART_Transmit(&huart2,(uint8_t*)msg1,strlen(msg1),HAL_MAX_DELAY);
为什么第 125 行会收到警告:“ passing argument 1 of 'sprintf' 来自不兼容的指针类型“
参考String Format Specifiers,我知道...
- h是一个长度修饰符,适用于无符号短参数,
- hh 到无符号字符,并且
- z 到 size_t
...但是怀疑第 132 行的 %ldHz 是什么意思,为什么这条线没有收到警告?
谢谢。
Hz
不是格式说明符的一部分:它只是在频率值之后打印 "Hertz" 的标准缩写。因此,实际的格式说明符只是 %ld
,以十进制格式打印一个长整数。
sprintf
的第一个参数是char *
。您正在传递uint8_t *
(即unsigned char *
)。那是指针类型不匹配。- 实际的格式说明符是
%ld
。后面的Hz
只是打印的文字。
Why does line 125 get a warning: " passing argument 1 of 'sprintf' from incompatible pointer type
uint8_t
不一定直接兼容 char
- 后者具有实现定义的签名。然而,uint8_t
可以安全地转换为 to/from char
,因此您可以尝试使用 (char*)msg
进行转换,看看是否能解决问题。
What does C print format specifier ' %ldHz ' mean?
类型 long
的格式说明符是 %ld
,Hz
是输出字符串(赫兹)的一部分。