char node_name[name.size()+1];
の値はname.size()
コンパイル時に不明であるため、上記の宣言でnode_name
は ISO C++ では許可されていない可変長配列 (VLA) です。
DevC++ では、コンパイル構成で有効になっている VLA 機能を拡張機能として提供するため、コンパイルして動作します。
std::string
、またはchar *
とともにnew[]/delete[]
、ニーズに合ったものを使用してください。
特定のケースでは、つまり、文字列リテラルが既にわかっている場合は、次のように書くことができます。
char node_name[] = "kingfisher"; //this works great!
ただし、文字列値がわからず、どこかからコピーしたい場合は、次のようにします。
char *node_name = new char[name.size()+1];
std::strncpy(node_name, name.c_str(), name.size()+1); //use strncpy
//work with node_name
//must deallocate the memory
delete []node_name; //not `delete node_name;`
上記のように、前者は 3 番目の引数としてもバッファ サイズを使用し、後者は使用しないため (通常は安全ではありませんが、この場合はそうではありません)、 のstd::strncpy
代わりに使用します。std::strcpy