2011-04-25 63 views
2

我試圖寫的Arduino的一個join方法:Arduino:字符串連接?

#define ARG_DELIMITER ',' 

    String join(const String strs[], const int len) { 
    String result = ""; 
    for (int i = 0; i < len; i++) { 
     result += strs[i] + ARG_DELIMITER; 
     Serial.println(result); 
    } 
    return result.substring(0, result.length() - 1); 
    } 

調用代碼loop()

const String args[3] = {"foo", "bar", "baz"}; 
Serial.println(SlaveTalk.join(args, 3)); 

此打印如下:

foo 
foo 
foo 
fo 

其次是空的字符串,只要程序運行。

我在這裏做錯了什麼?

+0

什麼是ARG_DELIMITER? – 2011-04-25 18:26:38

+0

可能更重要的是什麼'String'類/類型? – 2011-04-25 18:28:56

+1

@Michael - 'String'類似乎被定義爲[here](http://arduino.cc/en/Reference/StringObject)。 – 2011-04-25 18:41:55

回答

0

此行

const String args[3] = {"foo", "bar", "baz"}; 

給你的琴絃

"foo\0" "bar\0" "baz\0" 

其中\ 0是NULL字符。所以,當你Concat的,我希望你和結束了:

"foo\0bar\0baz\0" 

印刷停止在這就是爲什麼你看到富3次空。在return語句,長度爲3「foo」和減去1給你「FO」

+1

我不認爲這是正確的。 Arduino String類使用'strcat'作爲'+ =',如下所示:http://j.mp/dXCCrg。 'strcat'覆蓋第一個緩衝區的空終止符,並在末尾附加一個新的空終止符:http://www.cplusplus.com/reference/clibrary/cstring/strcat/。 – 2011-04-26 00:14:37

0

下面的代碼可以作爲使用Arduino的軟件版本0022和一個Arduino Duemilanove瓦特/的ATmega 328意:

#define ARG_DELIMITER ',' 

class SlaveTalkClass 
{ 
    public: 
    String join(const String strs[], const int len) { 
     String result = ""; 
     for (int i = 0; i < len; i++) { 
     result += strs[i] + ARG_DELIMITER; 
     Serial.println(result); 
     } 
     return result.substring(0, result.length() - 1); 
    } 
} SlaveTalk; 

void setup() 
{ 
    Serial.begin(9600); 
} 

void loop() 
{ 
    const String args[3] = {"foo", "bar", "baz"}; 
    Serial.println(SlaveTalk.join(args, 3)); 
} 

它反覆打印以下的串行監視器:

foo, 
foo,bar, 
foo,bar,baz, 
foo,bar,baz 
0

PString是可以Concat的一個很好的書房。它具有一些整潔的功能,並且最重要的是運行時安全。

+0

顯示如何使用PString進行實際任務,添加一些示例代碼! – Wolf 2017-09-21 12:16:34