读书人

CString 转 char*的有关问题

发布时间: 2012-08-02 11:35:26 作者: rapoo

CString 转 char*的问题

C/C++ code
        CString fenGeFu;    GetDlgItem(IDC_EDIT1)-> GetWindowText(fenGeFu);    CString inFile;    GetDlgItem(IDC_MFCEDITBROWSE1)-> GetWindowText(inFile);      int zifuNum=fenGeFu.GetLength()+1;    char *pBuf = (char*)malloc(zifuNum);      memset(pBuf,0, zifuNum);      memcpy(pBuf, (LPCTSTR)fenGeFu,zifuNum);//这里得到的永远是第一个字节?不懂为什么?


[解决办法]
C/C++ code
memcpy(pBuf, fenGeFu.GetBuffer(),zifuNum);fenGeFu.ReleaseBuffer();
[解决办法]
探讨

C/C++ code

memcpy(pBuf, fenGeFu.GetBuffer(),zifuNum);
fenGeFu.ReleaseBuffer();

[解决办法]
探讨

C/C++ code

memcpy(pBuf, fenGeFu.GetBuffer(),zifuNum);
fenGeFu.ReleaseBuffer();

[解决办法]
GetBuffer 就直接返回Char * 直接用就行 不用再分配内存了
用完ReleaseBuffer就行了
[解决办法]
pBuf指向一个划定的内存区域的第一个位置, memcpy()只是将fenGeFu.getbuffer()这样一个内存区域的内容复制到pBuf指向的那个内存区域,而pBuf仅仅是指向该区域的第一个位置,所以打印出来只会是该内存区域的第一个位置的值。

不知道解释清楚了木有
[解决办法]
CString根据设置对应CStringA(窄char)或者CStringW(宽wchar_t)。windows里,宽字符两字节,utf-16编码,'a'对应编码就是0x0061,小端系统里,内存摆放就是 0x61 0x00,memcpy是把zifuNum字节都复制了,但估计输出你用的是printf("%s",pBuf)之类的。这样0x61之后的0x00就成了字符串结束符,结果你发现输出就第一个字符。

读书人网 >C++

热点推荐