我一直在寻找这个解决方案,但我找不到具体的内容。我在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
,但我也遇到了问题。
答案 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);
}
所以我认为你可以接受莫里斯的回答:)