解决方案 »
- 请高手指点一下 怎样 用 VC 去连接 SQL2005
- 大家看我的代码哪里有问题?
- 关于对话框
- 如何限定CTreeCtrl中的某些节点不允许有子节点(它是叶子),以及如何限定某节点不能有兄弟节点(这一层仅有一个节点)
- _endthreadex(...)中的参数应该写什么?
- 制作MFC ActiveX控件,结合ActiveX control pad实现图片在网页上的显示
- 怎样在客户端注册ActiveX控件?
- ################ 有谁知道怎么动态的改变ComboBox的属性,从CBS_DROPDOWNLIST 变换到 CBS_DROPDOWN???? 先谢了,有答案100分马上送上 #########
- 关于CreateProcess()返回false,
- 关于gethostbyname的问题
- 求助:用MFC界面实现感知器算法(VC++6.0)
- 有人说C++程序员最适合学JS 相当震惊、大家请看原文
pbuf = new wchar_t[3]; // 分配长度为3的wchar_t数组,将pbuf指向这个数组
pbuf=L"你好"; // 字符串复制应使用wcscpy, 这时指针不再指向原来的数组,而是指向L“你好”的常量字符串
pbuf[2] = 0x0000; // 因为指向L“你好“的常量字符串,这时你对常量进行修改,内存访问非法了你的这段代码应该这样修改
pbuf = new wchar_t[3];
wcscpy(pbuf, L"你好"); // 字符串复制需要wcscpy,最好用wcscpy_s
wchar_t *pbuf;
DWORD fileLen;
fileLen=file.GetLength()/2;//返回文件长度,字节为单位
pbuf = new wchar_t[fileLen+1];
pbuf[fileLen] = 0x0000;
file.Seek(2,CFile::begin);
file.Read(pbuf,fileLen*2);
file.Close();
CString result(pbuf);
MessageBox(result);
wchar_t *pbuf;
DWORD fileLen;
fileLen=file.GetLength()/2;//返回文件长度,字节为单位
pbuf = new wchar_t[fileLen+1];
pbuf[fileLen] = 0x0000;
file.Seek(2,CFile::begin);
file.Read(pbuf,fileLen*2);
file.Close();
CString result(pbuf);
MessageBox(result);fileLen获取的是整个文件的长度,但是UNICODE头上还有BOM头,实际字符串长度是fileLen - 1
你分配的数组多了一个字符,这个字符应该是随机数据,你看到是?是很正常的。所以代码应该改为fileLen=(file.GetLength() - 2) / 2;就对了
另外你的pbuf[fileLen]= '\0';最好放在Read操作的后边,这样可避免由于Read操作错误覆盖了你先赋值的结束符'\0';
pbuf[fileLen] = 0x0000;
---------------------------------------------------->
pbuf = new wchar_t[fileLen+1];
memset(pbuf,0,sizeof(wchar_t)*(fileLen+1)); 试试
wchar_t *pbuf;
DWORD fileLen;
fileLen=file.GetLength()/2;//返回文件长度,字节为单位
pbuf = new wchar_t[fileLen+1];
pbuf[fileLen] = 0x0000;
file.Seek(2,CFile::begin);
file.Read(pbuf,fileLen*2);
file.Close();
CString result(pbuf);
MessageBox(result);fileLen获取的是整个文件的长度,但是UNICODE头上还有BOM头,实际字符串长度是fileLen - 1
你分配的数组多了一个字符,这个字符应该是随机数据,你看到是?是很正常的。所以代码应该改为fileLen=(file.GetLength() - 2) / 2;就对了
另外你的pbuf[fileLen]= '\0';最好放在Read操作的后边,这样可避免由于Read操作错误覆盖了你先赋值的结束符'\0';
多谢指点,感激不尽