无论我用那种方法mch都只有一个字符"a",我的工程是_UNICODE
1
CString aaa= "adasd";
char *mch;
mch=(LPSTR)(LPCTSTR)aaa;
2
char mch[20];
memcpy(mch,&aaa,20);
这是怎么回事?大家帮帮我
1
CString aaa= "adasd";
char *mch;
mch=(LPSTR)(LPCTSTR)aaa;
2
char mch[20];
memcpy(mch,&aaa,20);
这是怎么回事?大家帮帮我
解决方案 »
- 用WTL编程如何写入ini配置文件?
- 散分,如何实现自动从网页上下载数据?
- 有人整过 h263 没有???是不是h263 只能编码几个固定分辨率的图象?比如?
- 用ODBC连接数据库,执行SQL语句出错?
- 奇怪的stdafx.h问题??
- 关于消息的命名和windows API 的使用!!!!!!!!!!!!!!!!!!!!!!
- 多CPU下的编程!!!
- ******* 问一个关于 DC 做图的问题 ************
- vc中怎样调用dos下的代参数的可执行文件???请教!
- 用Winsock API编写的Server是否支持多个用户同时连接到Server的同一个端口?如何实现?谢谢!!!
- _UNICODE工程 写文件 CFile
- 请教tab页中还有tab页的问题。非常感谢。
2)c#中直接察看的是数组中的值,但c++不是
char mch[100];
sprintf(mch,"%s",aaa);
还是一个字符
memset(mch, 0x00, sizeof(char)*20);
memcpy(mch,&_T("abcdef"),20);
这是我的测试代码,在自动窗口中观察等到的结果
- mch 0x0012f2a0 "a" char [20]
[0] 97 'a' char
[1] 0 char
[2] 98 'b' char
[3] 0 char
[4] 99 'c' char
[5] 0 char
[6] 100 'd' char
[7] 0 char
[8] 101 'e' char
[9] 0 char
[10] 102 'f' char
[11] 0 char
[12] 0 char
[13] 0 char
[14] 0 char
[15] 0 char
[16] 0 char
[17] 0 char
[18] 0 char
[19] 0 char
进一步应该写成memcpy(mch, aaa, min(sizeof(mch), aaa.GetLength + 1)),避免对非法地址的写入和读取。
为什么弄这么复杂@_@
而转化后的值中第二个值就是0,也就是NULL;
所以就得不到想要的值了。
测试代码:
char mch[20];
memset(mch, 0x00, sizeof(char)*20);
mch[0] = 0x41;
mch[1] = 0x42;
mch[2] = 0x43;
mch[3] = 0x44;
int len= MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,mch,-1,NULL,0);
结果是5;就是因为第5个值为0
其实我做了一大堆操作,就是为了把一个路径的字符串转成_T("")的格式,要不打开文件出错
CString strFilePath="\\\\hostname\\aaa\\sas.csv";
bRtn=objTxtFile.Open(strFilePath,CFile::modeCreate | CFile::modeWrite );
出错
如果下面这么写就没问题
bRtn=objTxtFile.Open(_T("\\\\hostname\\aaa\\sas.csv"),CFile::modeCreate | CFile::modeWrite );
CFile objTxtFile;
BOOL bRtn=objTxtFile.Open(lpctStr,CFile::modeCreate ¦ CFile::modeWrite );
if (bRtn)
{
TRACE("");
}
这个我的测试代码,LZ可以把_T换成strFilePath
存储时先存储低字节,然后存储高字节。如0x0061在内存中先存储的是61
然后是00.当你在输出的时候遇到00就终止了。所以其他的就不考虑了。通俗地
说你应该调用UNICODE宽字符集的输出函数。
char *mch;
mch = T2A(aaa);
就不行了,郁闷
不过还是很感谢你
char *mch;
USES_CONVERSION;
mch = T2A((LPCTSTR)aaa); 如果要UNICODE下看字符串变量的值,可以这样设置:Tools->Options->Display unicode strings 打勾。