Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert String^ to char array [duplicate]

Possible Duplicate:
Need to convert String^ to char *

I have been looking so long for this solution but I can't find nothing specific. I work in Visual Studio C++, windows forms app. I need to convert String^ value into char array. I have stored value from TextBox in String^:

String^ target_str = targetTextBox->Text;

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

I need to convert this String^ and get output similar to this:

char target[] = "Need this string";

If it is defined as char target[] it works but I want to get this value from TextBox.

I have tried marshaling but it didn't work. Is there any solution how to do this?

I have found how to convert std::string to char array so another way how to solve this is to convert String^ to std::string but I have got problems with this too.

like image 914
user1869623 Avatar asked Feb 25 '26 01:02

user1869623


2 Answers

Your best bet is to follow the examples set forth in this question.

Here's some sample code:

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

The reason for this is because a .Net string is obviously a GC'd object that's part of the Common Language Runtime, and you need to cross the CLI boundary by employing the InteropServices boundary. Best of luck.

like image 150
Maurice Reeves Avatar answered Mar 02 '26 05:03

Maurice Reeves


In C/C++ there is equivalence between char[] and char* : at runtime char[] is no more than a char* pointer to the first element of the array.

So you can use you char* where a char[] is expected :

#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);
}

So I think you can accept Maurice's answer :)

like image 22
Pragmateek Avatar answered Mar 02 '26 03:03

Pragmateek