double temperature = 22.1;
unsigned char pacote[16] = "#0123456789ABCDEF";
unsigned char temp_local[3];
dtostrf(temperatura, 3, 1, temp_local);
sprintf(pacote+3,"%s", temp_local);
或
sprintf(pacote+3,temp_local);
得到了相同的printf:
#0122.1
取而代之的是:
#0122.16789ABCDEF
为什么它会删除所有其余的字符串,而不仅仅是在[3]之后替换接下来的4个位置而剩下的只剩下其余的4个位置。 我使用的是arduino,但我认为这是一般的C问题。
非常感谢!!!
答案 0 :(得分:0)
您应该将字符串数据移动到指定位置(而不是复制包含终止'\0'
的字符串):
memcpy(pacote+3, temp_local, strlen(temp_local));
答案 1 :(得分:0)
如果您使用的是C ++,那么请在
中使用string :: substrnew_string = old_string.substr(0,3)+“some text”+ old_string.substr(3);
在纯C中,首先需要确保目标有足够的空间。 sprintf返回写入的字符数。使用此选项可确保目标有足够的空间。然后根据需要将两个子字符串与新字符串连接起来。