您的位置:首页 > 其它

关于如何在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.代码如下:

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;


这样就可以了.但是有一个麻烦的地方就是要重新分配空间.而且如果越界的话,会有很严重的问题...暂时没有找到更好的解决方法,只能这样做先了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: