如何将String ^转换为char数组

时间:2012-12-02 01:45:29

标签: string visual-c++ c++-cli type-conversion

  

可能重复:
  Need to convert String^ to char *

我一直在寻找这个解决方案,但我找不到具体的内容。我在Visual Studio C ++,Windows窗体应用程序中工作。我需要将String^值转换为char数组。 我已将TextBox中的值String^存储起来:

String^ target_str = targetTextBox->Text;

// lets say that input is "Need this string"

我需要转换此String^并获得类似于此的输出:

char target[] = "Need this string";

如果将其定义为char target[],则可以使用,但我想从TextBox获取此值。

我尝试过编组,但是没有用。有没有解决方法怎么做?

我找到了如何将std::string转换为char数组,以便解决此问题的另一种方法是将String^转换为std::string,但我也遇到了问题。

2 个答案:

答案 0 :(得分:5)

您最好的选择是遵循this question中列出的示例。

以下是一些示例代码:

String^ test = L"I am a .Net string of type System::String";
IntPtr ptrToNativeString = Marshal::StringToHGlobalAnsi(test);
char* nativeString = static_cast<char*>(ptrToNativeString.ToPointer());

原因是因为.Net字符串显然是GC'd对象,它是公共语言运行时的一部分,您需要通过使用InteropServices边界来跨越CLI边界。祝你好运。

答案 1 :(得分:1)

在C / C ++中,char []和char *之间存在等价:在运行时,char []只是指向数组第一个元素的char *指针。

所以你可以使用char *,其中需要char []:

#include <iostream>
using namespace System;
using namespace System::Runtime::InteropServices;

void display(char s[])
{
    std::cout << s << std::endl;
}

int main()
{
    String^ test = L"I am a .Net string of type System::String";
    IntPtr ptrToNativeString = Marshal::StringToHGlobalAnsi(test);
    char* nativeString = static_cast<char*>(ptrToNativeString.ToPointer());
    display(nativeString);
}

所以我认为你可以接受莫里斯的回答:)