网上有人说这种方案:
1、CString转char *
CString cstr;
char *p =(LPSTR)(LPCTSTR)cstr;
实际测试,方法行不通,原因如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9MWbiBHcyIGasdUZox2RlZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zM5UDNyUjM0EDOxQDM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
还有人说这种方案:
2、CString转char *
CString strInsertSql = L"TEST测试";
char sql[256] = "";//初始化
sprintf(sql,"%s",strInsertSql);
实际测试,方法行不通,原因如下:
正确办法:
class CTools
{
public:
CTools(void);
~CTools(void);
//CString类型转char *
char *CStringToCharP(CString strIn);
};
char * CTools::CStringToCharP( CString strIn )
{
char * buffer = NULL;
int iTextLen;
iTextLen = WideCharToMultiByte( CP_ACP,0,strIn,-1,NULL,0,NULL,NULL );
buffer = NULL;
buffer = new char[iTextLen + 1];
memset( ( void* )buffer, 0, sizeof( char ) * ( iTextLen + 1 ) );
::WideCharToMultiByte( CP_ACP,0,strIn,-1,buffer,iTextLen,NULL,NULL );
return buffer;
}