如何在c ++中返回char数组?数组长度在函数本身中确定

时间:2014-10-14 20:24:07

标签: c++ arrays arduino

char *readByteArray() {
    unsigned char l = readByte (); // reads one byte from the stream
    char ret[l + 1]; // this should not be done
    ret[0] = l; // or could also define a struct for this like {int length, char *data}
    readBytes((char *)&ret + 1, l);
    return (char *)&ret;
}

所以问题是,我想返回一个数组,数组的长度由函数决定。

更好的例子是我用来读取字符串的函数:

char *readString () {
    unsigned char l = readByte (); // reads one byte from the stream
    char ret[l + 1]; // +1 for null byte
    readBytes((char *)&ret, l); // reads l bytes from the stream
    ret[l] = '\0'; // null byte
    return (char *)&ret; // problem
}

如果在函数之前确定数组的长度,我可以在函数外部分配数组并将其作为参数传递,但是调用它:

unsigned char l = readByte ();
char ret[l + 1];
readString (&ret, l);

每次我想读一个字符串都会破坏函数的目的。

在Windows和ATmega328上是否有优雅的解决方案(STL不可用)?

1 个答案:

答案 0 :(得分:2)

以下选项之一应该有效:

  1. 返回指向从堆分配的char数组的指针。确保删除调用函数中返回的值。

    char* readByteArray()
    {
       unsigned char l = readByte();
       char *ret = new char[l + 1];
       ret[0] = l;
       readBytes(ret + 1, l);
       return ret;
    }
    
  2. 返回std::vector<char>

    std::vector<char> readByteArray()
    {
       unsigned char l = readByte();
       std::vector<char> ret(l);
       readBytes(ret.data(), l);
       return ret;
    }