0

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

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

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

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

4

1 回答 1

1

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

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

于 2013-06-18T15:54:41.707 回答