char node_name[name.size()+1];
由于name.size()
在编译时不知道 的值,因此在上述声明中,node_name
是可变长度数组 (VLA),这在 ISO C++ 中是不允许的。
在 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;`
使用std::strncpy
代替std::strcpy
,因为前者将缓冲区大小也作为第三个参数,如上所示,而后者则没有(这通常是不安全的;但在这种情况下不是)。