void char() {
char buff[50];
int l;
int i = 0;
i = sprintf(buff,a,b,c);
for(i=0,i<=l,l++)
serial.println(buff);
}
我希望有一个像#123#234#
那样打印的缓冲区a=123
b=234
这是正确的方法吗?我试过但我没有得到任何输出。可能是愚蠢的错误。
编辑:
#include <stdio.h>
void abc() {
int a = 123;
int b = 234;
char buff[50];
int l;
int i = 0;
l = sprintf(buff,"#%d#%d#",a,b);
for(i=0;i<=l;l++);
printf("%s", buff);
//return buff;
//serial.println(buff);
}
int main() {
//char bhg = abc();
//printf("&d", bhg);
abc();
}
我试过这个。工作正常,但需要时间来提供输出。我能快点吗?可能它试图遍历char [50]进行分配。
答案 0 :(得分:3)
这不是你使用sprintf的方式。您需要使用格式字符串。像:
l = sprintf(buff,"#%d#%d#",a,b);
另外,您要在代码中将返回的长度分配给i,而不是l。
答案 1 :(得分:1)
我确定我可能在这里违反SO协议,但根据您的意见,您可以这样做:
a = 100;
b = 23;
Serial.print('#');
Serial.print(a);
Serial.print('#');
Serial.println(b);
这会将此字符串发送到您的串口:“#100#23”,并且可能是最有效的方式。
答案 2 :(得分:0)
忘掉sprintf
(几乎不可能安全使用)。类似的东西:
std::ostringstream buff;
buff << "#" << a << "#" << b << "#";
serial.println( buff.str().c_str() );
应该是您所需要的一切。 (虽然我不确定:代码中的l
是什么,为什么要循环它?)