Managed string to Unmanaged string

Taken from

Example Code

#include "stdafx.h"

using namespace std;

using namespace System;
using namespace System::Text;
using namespace System::Runtime::InteropServices;

//Converts a System::String to a std::string
//This code assumes that you have used the following namespace:
// using namespace System::Runtime::InteropServices;
std::string ManagedToSTL(System::String *managed) {
//get a pointer to an array of ANSI chars
char *chars = (char*) Marshal::StringToHGlobalAnsi(managed).ToPointer();

//assign the array to an STL string
std::string stl = chars;

//free the memory used by the array
//since the array is not managed, it will not be claimed by the garbage collector

return stl;

//Converts a std::string to a System::String
//This code assumes that you have used the following namespace:
// using namespace System::Runtime::InteropServices
System::String* STLToManaged(std::string stl) {
//the c_str() function gets a char array from the STL string,
//but the PtrToStringAnsi function wants a int array, so it gets casted
return Marshal::PtrToStringAnsi((int*) stl.c_str());

int _tmain()
/*Parsing and Comparison Example*/
//First, here is an example of simple string parsing
Console::WriteLine("Parsing and Comparison Example:");

//here is a string to parse
String *str = S"one two,three:four;five";

//this is a list of delimiters that can separate words
Char delim[] = {' ', ',', ':', ';'};

//using the Split() method, we can obtain an array of strings that
//are separated by the given delimeters
String *strArray[] = str->Split(delim);

//check that the first element contains "one"
//if you wish to compare alphabetically, use Compare() (see MSDN)
if (strArray[0]->Equals(S"one"))
Console::WriteLine("\"one\" == \"one\"");

//output all members of the array
//we should see:
// one
// two
// three
// four
// five
for (int i = 0; i <>get_Count(); i++)

/*StringBuilder Example*/
//Here is an example of using StringBuilder as a changeable alternative
//to the immutable String class
//Here we assume:
// using namespace System::Text;
Console::WriteLine("StringBuilder Example:");

//declare a new StringBuilder
StringBuilder *strBuild = new StringBuilder();

//use the Append() method to construct a string of the words that we parsed
for (int i = 1; i <>get_Count(); i++) {
strBuild->Append(" ");

//convert the StringBuilder to an immutable String and output
String *final = strBuild->ToString();

/*Conversion Example*/
//Here we see how to use the functions declared above to convert between
//the managed System::String class and the unmanaged STL std::string class
Console::WriteLine("Conversion Example:");

//the variables we will be using
String *managedString;
string stlString;

//converts a managed String to an STL string, using cout to output
managedString = S"Managed -> STL";
stlString = ManagedToSTL(managedString);
cout <<>

//converts an STL string to a managed String, using Console::WriteLine to output
stlString = "STL -> Managed";
managedString = STLToManaged(stlString);

return 0;


Popular posts from this blog

Clearcase check in/uncheck out all the checked out files script


Duplicating a local copy of project from TFS and making web software client factory to work