要从system :: String转换为std :: string,我使用以下代码:
IntPtr p = Marshal::StringToHGlobalAnsi(PORT);
string newString = static_cast<char*>(p.ToPointer());
Marshal::FreeHGlobal(p);
但是,我得到代码的地方使用
IntPtr p = Marshal::StringToHGlobalAnsi(PORT);
char* newString = static_cast<char*>(p.ToPointer());
Marshal::FreeHGlobal(p);
出于某种原因,如果我使用char *版本,我会在newString中获取垃圾。有人知道为什么会这样吗?
感谢。
答案 0 :(得分:4)
std::string
版本的工作原因是因为它会立即创建char*
值的私有复制。此私有副本不受后期FreeHGlobal
的影响。
char*
版本被分配了一个指向内存的指针,然后您可以在下一行释放。 FreeHGlobal
命令执行时它无效。
答案 1 :(得分:0)
std::string bla = "ConvertMe";
String^ ResultString= gcnew String(bla.c_str());