2013-07-24 47 views
0

去過在C#-land了一段時間,我不能工作了如何做到這一點在C++(在一個Arduino草圖)從函數返回可變長度數組

我想從庫中調用一個函數它返回未知長度的字節列表。的排序是這樣的:

byte devices[] = MyLib::EnumerateDevices(); 

和庫:

byte[] MyLib::EnumerateDevices() 
{  
    int count = 0;  

    //some code that modifies count 

    static byte *temp = new byte[count]; // Assume count is 2 here 

    temp[0] = 42; 
    temp[1] = 44;  

    return temp; 
} 

很顯然,我有我的所有指針和derefs丟失或放錯了地方......

幫助?

戴夫

+0

你需要一些方法來傳遞數組的長度,除非你可以從字節序列中推導出長度? –

+0

arduino使用AVR libc,它不支持新的和刪除:http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus – Craig

回答

5

這是載體是:

std::vector<int> func() 
{ 
    std::vector<int> r; 
    r.push_back(42); 
    r.push_back(1337); 
    return r; 
} 

載體已返回正是你想要什麼size()成員函數。

如果你想有一個指針出載體,然後寫

const int *p = &vec[0]; 

(顯然,替代int與任何類型你專門用向量。)

+0

這些天,你可以縮短到'return {42 ,1337};',如果你喜歡簡潔。 –

+0

@MikeSeymour,對。我的去只是爲了表明「在這裏你做的東西與載體,然後返回它」:) – 2013-07-24 16:38:35

+0

std :: vector(和STL的其餘部分)不可用在Arduino上。 – Craig

2

不能在返回數組C或C++。您可以返回一個指針,但在這種情況下,您還需要返回大小。使用std::vector<int>代替,更容易。