从system :: String转换为std :: string

时间:2012-01-28 02:24:30

标签: .net windows c++-cli

要从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中获取垃圾。有人知道为什么会这样吗?

感谢。

2 个答案:

答案 0 :(得分:4)

std::string版本的工作原因是因为它会立即创建char*值的私有复制。此私有副本不受后期FreeHGlobal的影响。

char*版本被分配了一个指向内存的指针,然后您可以在下一行释放。 FreeHGlobal命令执行时它无效。

答案 1 :(得分:0)

std::string bla = "ConvertMe";
String^ ResultString= gcnew String(bla.c_str());