In C89 e in C++ non puoi dichiarare array a dimensione non fissata a compile-time, per cui dovresti usare l'allocazione dinamica o una dimensione fissata sufficientemente grande.
Comunque, per la copia ti basta una strcpy.
Inoltre:
- char * str="hello" non è una buona idea, dato che hai un puntatore ad un'area di memoria che non deve essere modificata (ovvero, se cerchi di modificare lo string literal "hello" a cui fa riferimento str vai in undefined behavior, ovvero, su molte piattaforme, crash); sarebbe corretto const char * str="hello";
- in effetti, se vuoi creare un array di caratteri inizializzato fin da subito ad una certa stringa ti basta fare
codice:char str2[]="hello";