我的问题是基于下面的片段。
[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行会有一个警告: "从不兼容的指针类型中传递'sprintf'的参数1"
参看 字符串格式指定器我知道...
...但怀疑什么 %ldHz 在第132行是什么意思,为什么这一行没有被警告?
谢谢。
为什么第125行得到一个警告。"从不兼容的指针类型中传递'sprintf'的参数1。
uint8_t
不一定能直接与 char
- 后者具有实现定义的签名性。uint8_t
然而,可以安全地转换为从 char
所以你可以尝试用 (char*)msg
看看是否能解决这个问题。
C打印格式指定符'%ldHz'是什么意思?
格式指定符是 %ld
对于类型 long
, Hz
是输出字符串的一部分(赫兹)。
的 Hz
并不是格式指定符的一部分:它只是在频率值后面打印 "赫兹 "的标准缩写。所以,实际的格式指定符只是 %ld
,打印一个十进制格式的长整数。
sprintf
是一个 char *
. 你正在通过在一个 uint8_t *
(即一个 unsigned char *
). 这是一个指针类型不匹配。%ld
. 该 Hz
下面是被打印出来的文字。