MFC,如何获取CArray中的元素,哪个元素类型是CString

MFC, How to get the element in CArray, which element type is CString

本文关键字:元素 类型 CString CArray 何获取 获取 MFC      更新时间:2023-10-16

我混淆了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]没有数据,I而不是aryString.GetAt(0(,结果相同。

为什么?

.SetSize(3);
预留3个"房间"。调用
Add();
三次,再保留3个"房间",因此您在计数时得到6,您的数组如下:
  1. ""
  2. ""
  3. ""
  4. "a1"
  5. "a222"
  6. "a3"
。为了得到我想你想要的结果,一旦你设置了尺寸,你可以做:
aryString.SetSize( 3 );
aryString[0] = "a1";
aryString[1] = "a222";
aryString[2] = "a3";

附带说明一下,MFC为您提供了CStringArray类,因此您无需执行以下操作:

CArray<CString,CString>

执行aryString.SetSize(3);时,aryString会用空字符串保留3项。当在末尾添加三个新字符串时,数组的项计数为6。第一项是空字符串,aryString.GetAt[3]将返回a1,函数add将自动增加数组的大小,您不必使用SetSize(3)来保留空间

我使用以下代码来设计元素

aryString.SetAtGrow(0, _T("a"));
aryString.SetAtGrow(1, _T("a"));