我在GetAT和aryString [n]中混淆,如下面的代码
CArray <CString, CString> arySctring;
aryString.SetSize(3);
aryString.Add(_T("a1"));
aryString.Add(_T("a222"));
aryString.Add(_T("a3"));
TRACE(_T("%d %s"), aryString.GetCount(), aryString[0]);
TRACE结果为“6”,表示aryString [0]没有数据,我代替aryString.GetAt(0),结果相同。
为什么?
答案 0 :(得分:3)
.SetSize(3);
预订3间“房间”。调用Add();
三次,保留另外3个“房间”,因此你得到6个数,你的数组如下:- ""
- ""
- ""
- "a1"
- "a222"
- "a3"
。
为了得到你想要的结果,一旦你设定了尺寸,你就可以做到:aryString.SetSize( 3 );
aryString[0] = "a1";
aryString[1] = "a222";
aryString[2] = "a3";
另外,MFC为您提供了CStringArray类,所以您不必这样做:
CArray<CString,CString>
答案 1 :(得分:1)
当aryString.SetSize(3);
aryString
保留3个空字符串项时。
当你在结尾添加三个新字符串时,数组的项数是6.第一项是空字符串,aryString.GetAt[3]
将返回a1,函数add会自动增加数组的大小,你没有到SetSize(3)
预留空间
答案 2 :(得分:0)
我使用以下代码来分配元素
aryString.SetAtGrow(0, _T("a"));
aryString.SetAtGrow(1, _T("a"));