下面是我在VS2017环境下写的一些String转其他类型的代码
string str = "Hello";
//string转为char *
char* m_cr;
//c_str()函数返回的是一个const char *char型的指针
m_cr = (char *)str.c_str(); //此处我们需要将返回的指针类型强制转换一下
//string 转为const char *
//下面这条语句可以从又向左理解,理解为m_ccr is a point to char const m_ccr是一个指向字符型常量的指针。*可以被换成point to。
//常量指针:被指向的对象是常量
//指针常量:指针本身是常量
//*前面的是对被指向对象的修饰,*后面的是对指针本身的修饰。
const char *m_ccr;
m_ccr= str.c_str();
m_ccr++;
char tmp;
tmp = *m_ccr;
//现在换一种定义方式
//m_ccr2是一个指针常量,所以必须要在初始化的时候赋值,由于c_str()返回的是一个字符型常量指针,所以需要将指针类型强制转换一下
string str2 = "World";
char* const m_ccr2=(char *)str2.c_str();
*m_ccr2 = 's';
//如果我们希望这个指针啥都别动呢?
//可以定义如下:
string str3 = "Hello World!";
const char* const m_ccr3=str3.c_str(); //m_ccr3是一个指向字符常量的指针常量。
//string 转为CString
//方法一,利用构造函数直接赋值
CString m_cstr(str.c_str());
//方法二
CString m_cstr2;
m_cstr2=str.c_str();
//string转LPCSTR
LPCSTR m_lpcstr;
m_lpcstr= str.c_str(); //c_str()函数返回的就是LPCSTR类型
//string转LPWSTR
//char * 转LPWSTR的方式与此类似
LPWSTR m_lpwstr;
size_t origsize = str.length() + 1;
size_t convertedChars = 0;
m_lpwstr = (LPWSTR)malloc(sizeof(WCHAR)*origsize);
//mbstowcs_s()函数是C++中的标准库函数,用于将多字节编码字符串转换为宽字符编码字符串,即将char*转换成wchar_t*
mbstowcs_s(&convertedChars, m_lpwstr, origsize, str.c_str(), _TRUNCATE);
free(m_lpwstr); //申请完内存一定要注意释放
在将窄字节编码转为宽字节编码方式时,基本需要使用mbstowcs_s()标准库函数,否则直接将指针类型强制转换会有问题。