一个字符串中有两个以上的'\0'时,如果在CEdit中显示呢?
且这个字符串里有可能有任何值的不可见字符,这样的字符串我用连一个CString或LPCTSTR,LPTSTR也无法表示出来,再调用SetWindowText怎么能完整的显示出来呢?比如一个二进制的文件,我们用十六进制编辑器打开看时有可能里面存在许多不可见字符,里面也不乏零的存在,这样的东西我们可以用记事本打开看到的是乱码,但如果你用记事本的保存工能再保存了一次,那这个文件里的内容就可能被改变了,其实也是那里\0在做怪,这说明记事本里的容器的处理这些\0时也没有处理好,这个真的很难吗?
且这个字符串里有可能有任何值的不可见字符,这样的字符串我用连一个CString或LPCTSTR,LPTSTR也无法表示出来,再调用SetWindowText怎么能完整的显示出来呢?比如一个二进制的文件,我们用十六进制编辑器打开看时有可能里面存在许多不可见字符,里面也不乏零的存在,这样的东西我们可以用记事本打开看到的是乱码,但如果你用记事本的保存工能再保存了一次,那这个文件里的内容就可能被改变了,其实也是那里\0在做怪,这说明记事本里的容器的处理这些\0时也没有处理好,这个真的很难吗?
显示效果是\0\0
了吗
GetDlgItem(IDC_EDIT1)->SetWindowText("\\0\\0");
显示效果是\0\0
这样的可以是可以,
如果遇到 \\0\0\0就难看了
是这样的,你怎么显示,好象只能显出第一个\0前的内容吧
并且就算这样可以显示出全部内容,那如果又把一个文件的内容显示出来呢,如此这般:
CFile file;
file.Open("c:\\a.exe", CFile::modeRead);
UCHAR *pChar;
DWORD dwLen;
dwLen = File.GetLength();
pChar = new UCHAR[dwLen];
这时候的pChar里的内容如何显到到CEdit里呢,难道这样用:
SetWindowText(pEdit, LPCTSTR(pChar));delete pChar;
是这样的,你怎么显示,好象只能显出第一个\0前的内容吧
并且就算这样可以显示出全部内容,那如果又把一个文件的内容显示出来呢,如此这般:
CFile file;
file.Open("c:\\a.exe", CFile::modeRead);
UCHAR *pChar;
DWORD dwLen;
dwLen = File.GetLength();
pChar = new UCHAR[dwLen];
这时候的pChar里的内容如何显到到CEdit里呢,难道这样用:
SetWindowText(pEdit, LPCTSTR(pChar));
这样用如果这个文件是文本文件,可能没有问题,但如果是个二进制文件,里面有许多的NULL那么这个内容肯定就不能显示完
delete []pChar;
file.Close();
当:
CString t="00\0123450456";
::AfxGetApp()->GetMainWnd()->SetWindowText(t);
输出:00 3450456
CString t="00\012345\0456";
::AfxGetApp()->GetMainWnd()->SetWindowText(t);
输出:00 345%6 CString t="000123450456";
::AfxGetApp()->GetMainWnd()->SetWindowText(t);
输出:000123450456
实际上这里一个关键问题是实数0和字符0的区分,以及字符串的截取。
我们知道字符串是以"\0"定义为截至符,所以如果就应该注意到这一点就够了;当这个串中存在实数0说明它是数组就用uchar cs[m]=""来处理数组,如果是字串就可以用char* cs=""来处理。