传递缓冲区和缓冲区的大小作为参数

时间:2013-06-18 15:30:26

标签: arrays qt stack heap

我有一个填充空缓冲区(char *)的函数。它看起来像:

void Matrix::toString(char* buffer, int sizeBuffer) const{
    char buf[sizeBuffer];
    //some code to fill buf
    //copy buf into buffer
}

在我将QtCreator中的函数与我的新GUI一起使用之前,它一直运行良好。编译器告诉我他期望一个常量表达式并且不能分配一个常量大小为0 buf:未知大小的数组。

我搜索了一下,发现我必须动态分配我的数组。它工作正常,但现在我想知道..为什么我不能在堆栈上分配它?编码不好吗?而且,为什么它以前工作? 感谢

1 个答案:

答案 0 :(得分:1)

您的问题的基本答案是C ++标准不允许变长数组。在编译时无法知道sizeBuffer的值,因此可变性。我不熟悉这个决定的确切原因,但它确实简化了编译器的工作,并有助于避免堆栈溢出。

作为旁注,我认为你真的不需要首先声明一个单独的缓冲区。您无法将Matrix中的数据直接复制到buffer参数中吗?为什么不使用QString &参数呢?或者只返回QString