如何在VC ++中创建可变大小的char数组

时间:2013-08-26 12:39:37

标签: c++ arrays visual-studio mfc

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

5 个答案:

答案 0 :(得分:3)

在当前版本的C ++中,数组必须具有固定大小,由编译时常量指定。如果您需要使用运行时值,那么您的选项是:

  • 最便携,使用动态数组类,例如std::stringstd::vector<char>;
  • 使用支持C99可变长度数组的编译器作为非标准扩展;
  • 等待一年的动态数组(希望)在C ++ 14中引入(并且可能需要等待一段时间才能使编译器供应商赶上)。

答案 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;
} ;

所以你创建第一个结构并连接到第二个树和树

enter image description here

答案 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 ++编译器。)