【问题标题】:MFC, How to get the element in CArray, which element type is CStringMFC,如何获取CArray中的元素,元素类型是CString
【发布时间】:2014-06-26 20:29:44
【问题描述】:

我对 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),结果是一样的。

为什么?

【问题讨论】:

    标签: c++ arrays visual-c++ mfc cstring


    【解决方案1】:

    .SetSize(3);
    预留3个“房间”。调用
    Add();
    3 次,预留另外 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&lt;CString,CString&gt;

    【讨论】:

      【解决方案2】:

      当您执行 aryString.SetSize(3); aryString 时,保留 3 个带有空字符串的项目。 当你在最后添加三个新字符串时,数组的项数为6。第一项是空字符串,aryString.GetAt[3]会返回a1,函数add会自动增加数组的大小,你不必@ 987654324@预留空间

      【讨论】:

        【解决方案3】:

        我使用如下代码来分配元素

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多