void CTest6Doc::OnTest()
{
int nta,ntb;
char ch1[80];
CString str1(ch1);
nta=str1.GetLength(); //这里结果似乎正常……不过nta=89!
char ch[80][80]; // 去掉这里看似无关的声明,ntb结果就会变成正常值89!
char ch2[80];
// for(int nstr=0;nstr<80;nstr++)
// ch2[nstr]=ch[0][nstr]; //这样给ch2赋值,结果也是ntb=6481 !!!
memcpy(ch2,ch1,80);
CString str2(ch2);
ntb=str2.GetLength();//这里ntb=6481 !!!
}其实是想问一个很关键的问题,——
怎样把一个很大的结构中的char数组变成CString?而不用“附带”上很多很多无关的数据……因为直接用转换,CString的长都会变得很长很长!然后只能用.Left()来获得所需要的长度!为什么会这样呢?CString很垃圾?(VC6+win2k)
{
int nta,ntb;
char ch1[80];
CString str1(ch1);
nta=str1.GetLength(); //这里结果似乎正常……不过nta=89!
char ch[80][80]; // 去掉这里看似无关的声明,ntb结果就会变成正常值89!
char ch2[80];
// for(int nstr=0;nstr<80;nstr++)
// ch2[nstr]=ch[0][nstr]; //这样给ch2赋值,结果也是ntb=6481 !!!
memcpy(ch2,ch1,80);
CString str2(ch2);
ntb=str2.GetLength();//这里ntb=6481 !!!
}其实是想问一个很关键的问题,——
怎样把一个很大的结构中的char数组变成CString?而不用“附带”上很多很多无关的数据……因为直接用转换,CString的长都会变得很长很长!然后只能用.Left()来获得所需要的长度!为什么会这样呢?CString很垃圾?(VC6+win2k)
在这里,你要学到的是:字符串以'\0'(0)出现才表示结束
给CString类型赋值是是以'\0'为结束符的
如果这样:
char ch1[80];
ch1[0] = 'a';
ch1[1] = '\0'
CString str1(ch1);
nta = str1.GetLength();
相信nta = 1, 我没有算
所以,使用内存前先初始化, 另外,char 赋值给CString, 只赋值'\0'前面的内容,由于你的内存没有初始化,所以里面的内容不确定,所以, 你不知道哪里是'\0'你得出来的长度是错误的,而且你的程序可能会运行时刻错误
CString str1(ch1);????楼主为什么不初始化,你知道ch1的每个元素是什么值吗,还有CString很好,是你不会用
====================================================
const char cEnd = 0;这样你CString szArray(pArray)时,szArray.GetLength()最大也就N了。
如CString strTmp;
strTmp = "123";
strTmp += 0x00;
strTmp += "567";
int len = szArray.GetLength();
不知你们认为len = ?
3 or 7.
我的意思是中间有一个0x00是否会当成结束了呢,也许上面的结果会等于3(可能我举的例子不好),但是我敢肯定的告诉你们在你真要使用的时候,且有效值中间真会有0x00,CString还是有效的,它能反给你真正的长度,也就应该是7。