2014-12-31 20 views
5

Temelde, bu yapmaya çalışıyorum: temiz bunu yapmanın bir yoluBildirimde bir arabelleği bir diziyle başlatmanın bir yolu var mı?

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

demo

var mı? Ham dizileri KULLANMAYIN, ya da ham işaretçiler lütfen yorum yapmayın.

+0

Ne çiğ diziler veya ham işaretçileri kullanmayın demek? Sorduğun şey bu değil mi? – Daniel

+1

Etiketlerinizin önerdiği gibi C++ 11 kullanıyorsanız, [std :: array'i burada gösterilen şekilde kullanabilirsiniz] (http://stackoverflow.com/a/27708185/919747). –

+0

['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string) bunu temiz şekilde yapmanın yoludur. – 0x499602D2

cevap

4

Sadece bir işlev yazın.

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

Tabi ki yorum yapmamamızı rica ediyoruz. * kafa sallıyor * – Adrian

2

C yolu:

char* y = strdup(x); 
free(y); 
İlgili konular