How to: Convert System::String to wchar_t* or char*

在.net平台上使用c++/clr开发,经常会遇到这样一个问题:How to: Convert System::String to wchar_t* or char* ?

MSDN上的这篇文章会打消你的疑虑,告诉你一个转换途径。(简单的英文,恕不翻译)

You can use PtrToStringChars in Vcclr.h to convert String to native wchar_t * or char *. This always returns a wide Unicode string pointer because CLR strings are internally Unicode. You can then convert from wide as shown in the following example.

Example

//  convert_string_to_wchar.cpp
//  compile with: /clr
#include  <  stdio.h  >
#include 
<  stdlib.h  >
#include 
<  vcclr.h  >

using   namespace  System;

int  main() {
   String 
^ str  =   " Hello " ;

   
//  Pin memory so GC can't move it while native function is called
   pin_ptr < const  wchar_t >  wch  =  PtrToStringChars(str);
   printf_s(
" %S " , wch);

   
//  Conversion to char* :
   
//  Can just convert wchar_t* to char* using one of the 
   
//  conversion functions such as: 
   
//  WideCharToMultiByte()
   
//  wcstombs_s()
   
//  ... etc
   size_t convertedChars  =   0 ;
   size_t  sizeInBytes 
=  ((str -> Length  +   1 *   2 );
   errno_t err 
=   0 ;
   
char      * ch  =  ( char   * )malloc(sizeInBytes);

   err 
=  wcstombs_s( & convertedChars, 
                    ch, sizeInBytes,
                    wch, sizeInBytes);
   
if  (err  !=   0 )
      printf_s(
" wcstombs_s  failed! " );

    printf_s(
" %s " , ch);
}

Output:

Hello
Hello

你可能感兴趣的:(c,.net,String,System,平台,output)