我有一个填充空缓冲区(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:未知大小的数组。
我搜索了一下,发现我必须动态分配我的数组。它工作正常,但现在我想知道..为什么我不能在堆栈上分配它?编码不好吗?而且,为什么它以前工作? 感谢
答案 0 :(得分:1)
您的问题的基本答案是C ++标准不允许变长数组。在编译时无法知道sizeBuffer
的值,因此可变性。我不熟悉这个决定的确切原因,但它确实简化了编译器的工作,并有助于避免堆栈溢出。
作为旁注,我认为你真的不需要首先声明一个单独的缓冲区。您无法将Matrix中的数据直接复制到buffer
参数中吗?为什么不使用QString &
参数呢?或者只返回QString
?