2017-06-10 67 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