2014-12-31 13 views
5

Fondamentalmente, io sto cercando di fare questo:C'è un modo per inizializzare un array con un buffer al momento della dichiarazione?

char x[] = "hello"; 
char* y = new char[sizeof(x)](x); // won't work. 

demo

C'è un modo per fare questo in modo pulito? Non ci sono commenti su NON USARE array grezzi o puntatori grezzi per favore.

+0

Che cosa si intende non utilizzare le matrici prime o puntatori prime? Non è quello che stai chiedendo? – Daniel

+1

Se si utilizza C++ 11 come suggerito dai tag, è possibile utilizzare [std :: array nel modo illustrato qui] (http://stackoverflow.com/a/27708185/919747). –

+0

['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string) è il modo per farlo in modo pulito. – 0x499602D2

risposta

4

Basta scrivere una funzione.

template<typename T, size_t N> 
T* new_array(T const(&arr)[N]) 
{ 
    T* p = new T[N]; 
    std::copy(std::begin(arr), std::end(arr), p); 
    return p; 
} 

int main() 
{ 
    char x[] = "hello"; 
    char* y = new_array(x); 
} 
+0

Naturalmente. * schiaffeggia la testa * – Adrian

2

Il modo C:

char* y = strdup(x); 
free(y); 
Problemi correlati