我正在使用softserial与蓝牙调制解调器通信,我正在使用以下代码将字符串推送到串口:
document.forms
我需要能够用
替换字符串char bt_string = "test";
bluetooth_println(bt_string);
我尝试过以下代码
printf(" Error: cmd=%02hX, res=%02hX\n", CMD_SEND_CID, res);
但它没有输出任何东西。我显然误解了一些事情。谢谢你的帮助。
答案 0 :(得分:4)
您需要为字符串提供缓冲区。
char bt_string[256]; // <-- or any size that you are sure will be enough for what you will put in.
最终,为了安全起见,您可以使用snpritf
来避免任何缓冲区溢出:
#define MAX_BT_STRING 256
char bt_string[MAX_BT_STRING];
snprintf(bt_string, MAX_BT_STRING," Error: cmd=%02hX, res=%02hX\n", CMD_SEND_CID, res);
bluetooth_println(bt_string);
答案 1 :(得分:1)
char *str
和char str[]
明显不同。查看this question了解详情。
在你的问题中,你将bt_string声明为const char *bt_string = "test"
,其中bt_string
是指向字符串“test”中第一个字符的指针。该字符串的大小为5个字节(不要忘记终结符\ 0);
下一步:
sprintf(bt_string, " Error: cmd=%02hX, res=%02hX\n", CMD_SEND_CID, res);
您将超过5个字节转储到bt_string,它只有5个字节的可用空间。超过5个字节的部分将覆盖bt_string之后的内容,这可能会导致一些严重的情况或什么都没有,这取决于所遵循的内容。
要解决此问题,您必须分配足够的内存空间: