2017-06-10 61 views
-1

我在下面粘贴的这段代码中发生错误。 它说:数组大小分配错误

1.Expression必须有一个常数值。

2.Expression的结果不是一个常数

#include <iostream> 
#include <string> 

using namespace std; 



int main() 
{ 

    string ko = "flip"; 
    int kosize = ko.size(); 
    char arra[kosize] = { 1,3,2 }; 
    cin.ignore(numeric_limits<streamsize>::max(),'\n'); 
    return 0; 
} 

因此,我怎么分配基于字符串的大小的数组?

+6

一般而言,在C++中,您不需要。您可以使用例如一个'std :: vector'。 –

+1

在C++中,像'int arr [kosize]'这样的声明要求'kosize'是一个编译时间常量。 'kosize'是一个变量,即它的值是在运行时确定的。因此,错误。 – Peter

回答

2

那么如何根据字符串的大小来分配一个数组呢?

您可以使用动态分配的数组,如:

char* arra = new char[kosize]; 
arra[0] = 1; 
arra[1] = 3; 
arra[2] = 2; 

但是,在使用动态分配的内存一样,把管理上你记忆的负担。你必须确保你释放内存。 使用std::vector会更好。

std::vector<char> arra(kosize); 
arra[0] = 1; 
arra[1] = 3; 
arra[2] = 2; 
+1

@Curious,我的目的是明确地创建给定大小的“矢量”。 –

+1

适合我,我只是认为'initializer_list'会让OP更容易决定切换到'std :: vector' – Curious