c - 如何避免 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);
为什么第 125 行会收到警告:“从不兼容的指针类型传递 'sprintf' 的参数 1”
请参阅字符串格式说明符,我知道...
- h是适用于无符号短参数的长度修饰符,
- hh为无符号字符,并且
- z到 size_t
...但怀疑第 132 行的%ldHz是什么意思,为什么这条线没有收到警告?
谢谢。
解决方案
Hz
不是格式说明符的一部分:它只是在频率值之后打印“赫兹”的标准缩写。因此,实际的格式说明符只是%ld
,以十进制格式打印一个长整数。
推荐阅读
- tomcat - 在 OAuth 身份验证代码授权流程中从 CAS(PingFederate) 重定向,在 OAuth 客户端上创建新会话
- .net-core - F# RSA 解密不能使用单独的公钥和私钥
- java - com.datastax.oss.driver.api.core.DriverTimeoutException:查询 'SELECT * FROM system.local' 在 PT0.5S 后超时
- oracle - 如何更改表空间 ORACLE 中 MAXBYTES 和 INCREMENT_BY 的值?
- android - 从应用程序中截取屏幕截图:Android Studio
- go - 如何使用多个 JSON 对象触发和处理 http POST 请求
- python - 从 tweepy 获取“无效或过期的令牌”
- spring-boot - 在 Spring Boot 中使用 Mongodb 数据库从响应格式中删除根元素数组
- c++ - 用箭头代码重构无限循环
- mysql - 将此 MySQL 查询转换为 SQL Server