首页 > 解决方案 > 如何避免 uint8_t 数据类型的 sprintf 警告

问题描述

我的问题基于以下片段:

    [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);
  1. 为什么第 125 行会收到警告:“从不兼容的指针类型传递 'sprintf' 的参数 1”

  2. 请参阅字符串格式说明符,我知道...

    • h是适用于无符号短参数的长度修饰符,
    • hh为无符号字符,并且
    • z到 size_t

...但怀疑第 132 行的%ldHz是什么意思,为什么这条线没有收到警告?

谢谢。

标签: cprintfformat-specifiers

解决方案


Hz不是格式说明符的一部分:它只是在频率值之后打印“赫兹”的标准缩写。因此,实际的格式说明符只是%ld,以十进制格式打印一个长整数。


推荐阅读