将String ^转换为const char *

时间:2014-03-17 21:45:51

标签: c++ string stl c++-cli

Haven在很长一段时间内都没有使用过Windows Form,这是我第一次在C ++中使用它。

所以这是我第一次在数据类型和类对象之后遇到^的使用,例如:

Void Form1::btnConvert_Click(System::Object^  sender, System::EventArgs^  e)
幽灵般的东西。

我试图调用一个需要长指针到常量字符串的函数,所以const char *或LPCSTR。

const char* cPath = txtBoxPath->Text.c_str();

问题是当我尝试从字符串^转换时,我收到错误:

error C2228: left of '.c_str' must have class/struct/union
          type is 'System::String ^'
          did you intend to use '->' instead?

所以,现在我有点腌渍了。有什么建议?也许教育我一点这个^符号,因为我在Google上搜索时似乎找不到任何东西。

2 个答案:

答案 0 :(得分:3)

您可以通过以下方式将System::String转换为std::string

// Requires:
#include <msclr/marshal_cppstd.h>

auto str = msclr::interop::marshal_as<std::string>(txtBoxPath->Text);

获得std::string后,c_str()将为您提供const char*

const char* cPath = str.c_str();

请注意,您也可以使用Marshal直接进行转换,即:

IntPtr tmpHandle = Marshal::StringToHGlobalAnsi(txtBoxPath->Text);
char *cPath = static_cast<char*>(tmpHandle.ToPointer());

// use cPath

Marshal::FreeHGlobal(tmpHandle); // Don't use cPath after this...

答案 1 :(得分:0)

^字符表示托管指针(或引用)。 txtBoxPath :: Text是System :: String类型的引用。您需要取消引用它以使用点运算符或只使用 - &gt;。

对于System :: String ^ to char *,请尝试以下操作:

char* cPath = (char*)Marshal::StringToHGlobalAnsi(txtBoxPath->Text).ToPointer();