如何解决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 举报,一经查实,本站将立刻删除。