const int sizea = 600;
char sz[sizea];
上面的代码工作正常。但是在代码段下方会导致错误。 我正在开发visual studio 2005 - MFC应用程序
CString strFinal;
.......//strFinal value is dynamically changing . .
const int size = strFinal.GetLength();
char sz[size];
错误2错误C2057:预期的常量表达式
错误5错误C2070:'char []':非法sizeof操作数
错误4错误C2133:'sz':未知大小错误3错误C2466:无法分配数组 常数0
答案 0 :(得分:3)
在当前版本的C ++中,数组必须具有固定大小,由编译时常量指定。如果您需要使用运行时值,那么您的选项是:
std::string
或std::vector<char>
; 答案 1 :(得分:1)
您可以将矢量用作动态数组。试试这个。
#include <vector> // use this header
#include <iostream>
using namespace std; // use this namespace
int main()
{
vector<int> v; //declare dynamic array equivalent
for (int i = 0; i < 10; ++i) {
v.push_back(10 + i);
}
cout << "vector data: " << endl;
print_collection(v);
while (v.begin() != v.end()) {
cout << "v.back(): "; print_elem(v.back()); cout << endl;
v.pop_back();
}
}
答案 2 :(得分:0)
我很久以前做过这样的事情 想法是使用指针。
所以你需要制作具有(char和nextPointer)的结构 char表示数组的当前值,nextPointer表示系列的下一个结构
循环遍历那些指针你将得到你希望结构连接的数组
struct yourStructure {
Char char;
double nextPointer;
} ;
所以你创建第一个结构并连接到第二个树和树
答案 3 :(得分:-1)
正常用例是对可变大小的元素使用new
(和delete
完成后)。如果必须使用堆栈,则可以使用alloca
。
char *psz = new char[size+1]; // +1 you probably want zero-termination
...
delete [] psz;
答案 4 :(得分:-1)
它会产生错误,因为GetLength()
会返回一个任意值,而不是静态定义。
正确的方法是分配足够的内存来保存您的字符串,如果需要,可以通过调用NULL
或使用malloc
运算符(如果编译)来终止new
终止符号使用C ++编译器。)