天天看点

String 转char *,CString,LPCSTR,LPWSTR

下面是我在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()标准库函数,否则直接将指针类型强制转换会有问题。