关于如何在CString和char*之间转换的一些心得
2007-11-30 08:25
537 查看
在VC编程中,我们通常要用到字符串之间的转换,一下是自己的使用心得
方法一:
CString oper_str1,oper_str2;
oper_str1 = "1234";
oper_str2 = "2323";
const size_t newsize = 100;//定义保存cstring的长度
char nstring1[newsize],nstring2[newsize];
char* ptemp1 = (char*)oper_str1.GetBuffer(0);
char* ptemp2 = (char*)oper_str2.GetBuffer(0);
strcpy(nstring1,ptemp1);//CString->char*
strcpy(nstring2,ptemp2);
oper_str1.ReleaseBuffer(-1);
oper_str2.ReleaseBuffer(-1);
方法二
相关函数: bcopy(), memccpy(), memmove(), strcpy(), strncpy()
表头文件: #include <string.h>
定义函数: void *memcpy(void *dest, const void *src, size_t n)
函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'/0'而结束
返回值: 返回指向dest的指针
附加说明: 指针src和dest所指的内存区域不可重叠
CString Str_today;
char data[512];
ZeroMemory(data,512);
Str_today="haungyifan";
memcpy(data,Str_today,Str_today.GetLength());
CString strtest;
strtest=data;
MessageBox(strtest);
方法三
今天使用CString转换为char*的时候,竟然发现了一个问题:我在VS2008下编译,编码为Unicode.代码如下:
我以为这样就正常了.但是使用的时候,发现第一个字符是正常的.也就是'c' == p[0].但是':' != p[1].这是为什么呢?原来(LPCTSTR)path.GetString()转换出来的是宽字符,一个字符占两个字节.所以第二个字节显示为0x00,所以响应的,需要改造如下:
这样就可以了.但是有一个麻烦的地方就是要重新分配空间.而且如果越界的话,会有很严重的问题...暂时没有找到更好的解决方法,只能这样做先了.
方法一:
CString oper_str1,oper_str2;
oper_str1 = "1234";
oper_str2 = "2323";
const size_t newsize = 100;//定义保存cstring的长度
char nstring1[newsize],nstring2[newsize];
char* ptemp1 = (char*)oper_str1.GetBuffer(0);
char* ptemp2 = (char*)oper_str2.GetBuffer(0);
strcpy(nstring1,ptemp1);//CString->char*
strcpy(nstring2,ptemp2);
oper_str1.ReleaseBuffer(-1);
oper_str2.ReleaseBuffer(-1);
方法二
相关函数: bcopy(), memccpy(), memmove(), strcpy(), strncpy()
表头文件: #include <string.h>
定义函数: void *memcpy(void *dest, const void *src, size_t n)
函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'/0'而结束
返回值: 返回指向dest的指针
附加说明: 指针src和dest所指的内存区域不可重叠
CString Str_today;
char data[512];
ZeroMemory(data,512);
Str_today="haungyifan";
memcpy(data,Str_today,Str_today.GetLength());
CString strtest;
strtest=data;
MessageBox(strtest);
方法三
今天使用CString转换为char*的时候,竟然发现了一个问题:我在VS2008下编译,编码为Unicode.代码如下:
CString path = L"c:/data"; char *p = (char*)((LPCTSTR)path.GetString());
我以为这样就正常了.但是使用的时候,发现第一个字符是正常的.也就是'c' == p[0].但是':' != p[1].这是为什么呢?原来(LPCTSTR)path.GetString()转换出来的是宽字符,一个字符占两个字节.所以第二个字节显示为0x00,所以响应的,需要改造如下:
char szStr[256] = {0}; wcstombs(szStr, path, path.GetLength()); char *p = szStr;
这样就可以了.但是有一个麻烦的地方就是要重新分配空间.而且如果越界的话,会有很严重的问题...暂时没有找到更好的解决方法,只能这样做先了.
相关文章推荐
- 关于Char* ,CString ,WCHAR*之间的转换问题
- 如何实现int, char*, float与CString之间的转换
- 关于Char* ,CString ,WCHAR*之间的转换问题
- 关于Char* ,CString ,WCHAR*之间的转换问题
- 如何实现int、char*、float、与CString之间的转换
- 收集的关于C++中CString,int,string,char*,string之间的转换
- c++中的一些类型转换 : CString,string,int ,long,double,char*,const char*,date等
- VC中CString,char*,string,int之间的相互转换
- Cstring,string,char*,char[]之间的转换
- c++中的一些类型转换 : CString,string,int ,long,double,char*,const char*,date等----留着备用
- CString,string,char*,char a[100],int之间转换
- 关于VC中的数据类型转换BSTR、char*和CString的深入研究。
- 关于XML文档和JAVA中的JTree之间如何转换的问题
- char*,wchar_t*,CString和BSTR之间的转换
- CString与int、char*、char[100]之间的转换
- CString,string,char*, int之间的常用转换
- [转]CString, int, string, char* 之间的转换
- CString, int, string, char* 之间的转换
- C++中 char*, string, CString, int, double之间相互的转换
- Char* ,CString ,WCHAR*之间的转换