在缓冲区中推送多个变量值

时间:2014-12-09 17:34:07

标签: c++ arduino printf

    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]进行分配。

3 个答案:

答案 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是什么,为什么要循环它?)