读书人

CString -〉char *有关问题帮帮忙

发布时间: 2012-01-13 22:43:29 作者: rapoo

CString -〉char *问题,帮帮忙
无论我用那种方法mch都只有一个字符"a",我的工程是_UNICODE
1
CString aaa= "adasd";
char *mch;
mch=(LPSTR)(LPCTSTR)aaa;
2
char mch[20];
memcpy(mch,&aaa,20);
这是怎么回事?大家帮帮我

[解决办法]
sprintf(mch, "%s", aaa);
[解决办法]
1)LZ肯定是看错误了,mch是指针,只看到第一个值,LZ可以把*mch所对应的内存地址,放在内存中查看,看到底是多少?具体的方式是:调试-〉窗口-〉内存,然后看看
2)c#中直接察看的是数组中的值,但c++不是
[解决办法]
算一下长度:
_tcslen(mch);
[解决办法]
其实你上面的两种方法都已经让mch是指向"adasd"的指针了,你可以通过很多方式看到,你说mch只有一个字符"a"那是*mch。

另外,你的第二个方法的memcpy的第二个参数不应该再对aaa取址了,直接memcpy(mch, aaa, 20),
进一步应该写成memcpy(mch, aaa, min(sizeof(mch), aaa.GetLength + 1)),避免对非法地址的写入和读取。
[解决办法]
因为你用的是_UNICODE 字符集,它用2个字节为字符编码。再内存中
存储时先存储低字节,然后存储高字节。如0x0061在内存中先存储的是61
然后是00.当你在输出的时候遇到00就终止了。所以其他的就不考虑了。通俗地
说你应该调用UNICODE宽字符集的输出函数。
[解决办法]
tools->options->debug->Display unicode strings这项勾上,在调试器里看看能不能看到字符串了。
[解决办法]
#include <atlconv.h>

CString aaa = _T("adasd");
char *mch;
USES_CONVERSION;
mch = T2A((LPCTSTR)aaa);

如果要UNICODE下看字符串变量的值,可以这样设置:Tools->Options->Display unicode strings 打勾。

读书人网 >VC/MFC

热点推荐