问题描述
代码:
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 操作系统上运行的程序那样容易崩溃。
这会导致很难找到那些随机工作或没有明确模式崩溃的错误。