2

可能重复:
需要将 String^ 转换为 char *

我一直在寻找这个解决方案,但我找不到任何具体的东西。我在 Visual Studio C++、Windows 窗体应用程序中工作。我需要将String^值转换为 char 数组。我已经存储了来自TextBoxin 的值String^

String^ target_str = targetTextBox->Text;

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

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

char target[] = "Need this string";

如果它被定义为char target[]有效,但我想从TextBox.

我尝试过编组,但没有奏效。有什么解决方案如何做到这一点?

我已经找到了如何转换std::stringchar数组,所以另一种解决方法是转换String^为,std::string但我也遇到了问题。

4

2 回答 2

5

最好的办法是遵循这个问题中提出的示例。

这是一些示例代码:

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 处理的对象,它是公共语言运行时的一部分,您需要通过使用 InteropServices 边界来跨越 CLI 边界。祝你好运。

于 2012-12-02T03:18:06.373 回答
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);
}

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

于 2012-12-02T14:30:58.577 回答