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;`
使用std::strncpy
代替std::strcpy
,因爲前者需要緩衝大小也作爲第三個參數,如上所示,而後者沒有(這是不安全的,通常,在此情況雖然)。
爲什麼不讓'node_name'也是'std :: string'? – iammilind
這樣做後,你用'node_name'做了什麼?有可能所有這些都可以避免,但很難說如果不知道你在用'node_name'做什麼。 –
我可以向你建議你習慣於在最大警告水平上編譯嗎?其中一人會在DevC++中使用GCC時提醒您,這是不正確的,當您完成後,您可以確信它可以在任何符合標準的編譯器上工作。 – chris