微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sprintf 需要 char * 类型的参数 - 但类型 IS char

如何解决sprintf 需要 char * 类型的参数 - 但类型 IS char

代码

void bleAdvData(char *advData,uint8_t size){

char command[18+size];
uint8_t commandUint[18+size];

sprintf(command,"AT+BLEADVDATA=\"%s\"\r\n",*advData);

sprintf 行中的警告:

Argument %s expects argument of type "char *",but argument 3 has type int

为什么?

而我必须做的: 我想将一个字符串(advData)与“大小”的长度传输到一个函数中,以获得一个字符串命令,如:

AT+BLEADVDATA="advData"\r\n

解决方法

您的变量 advData 在参数列表中定义为 char *。这是一个指向存储字符数据的地址的指针。但是,在您的 sprintf() 中,您使用 *advData,即 advData 指向的实际位置,而不是地址本身。

* 中取下 sprintf(),一切都会好起来的。

,

澄清:第一行的 advData 使 char * 成为 advData

但是随后您在 * (char *advData) 中添加了一个星号,因此您有 sprintf(command,"AT+BLEADVDATA=\"%s\"\r\n",advData);

所以你想要这个:

advData

那个额外的星号“取消引用”了 sprintf 所以你现在试图传入字符串的第一个字符

{{1}} 然后抱怨,因为那不是一个有效的字符串。如果你运行它,它要么崩溃,要么在 ESP32 上给你胡言乱语。

我建议在 ESP32 上使用警告作为错误选项。警告没有意义的情况很少见,而且 ESP32 不像在现代 PC 操作系统上运行的程序那样容易崩溃。

这会导致很难找到那些随机工作或没有明确模式崩溃的错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。