перебирать все символы строке и запихивать в char* нельзя — они юникодные
я использую следующий код:
__gc class Utils
{
public:
static System::Text::Encoding* encoding=System::Text::Encoding::GetEncoding(1251);
static char* ToChars(System::String* str)
{
if(str==0 || str->Length==0)
return "";
char bytes __gc[] = encoding->GetBytes(str);
char __pin *p = &bytes[0];
return p;
}
};
а используются полученные строки через __pin указатели
void set_Text(String* value)
{
char __pin *text=Utils::ToChars(value);
//...
}
delete не надо вызывать, т.к. само подчистится сборщиком мусора.
__pin указатель нужен для того, чтобы строка не удалялась, пока мы не выйдем из функции.