• 关于 CArrayFixFlat 与 RArray 与 CArrayPtrFlat 的测试


    RArray 与 CArrayFixFlat 保存的是对话的副本,如果添加栈对像到 这个类的里面,当出了栈对像的作用域后,还是可以使用

    RArray 与 CArrayFixFlat 中保存的值的,因为RArray 与 CArrayFixFlat 保存的是栈对像的副本

    而 CArrayPtrFlat 则保存的是对像的地址,如果用临时变量(保存到栈的变量),出了变量的作用域后,则再次调用

    CArrayPtrFlat 后,出现乱码。

    如果用 RArray 与 CArrayFixFlat 保存 TDes 时,要写明长度,不能直接用 RArray<TDesC> 这种定义,否则在获取 RArray 的数据时

    出现乱码,同样适用于 RArrayFixFlat

    对于这个,刚开始一直以为是代码哪里有问题,后来找到别人写的文章,才发现定义不一样,改正后就没有问题了

    代码如下:

    LOCAL_D CConsoleBase* console;  // write all messages to this


    //  Local Functions

    typedef TBuf<4> tb;
    class CTest
     {
    public:
     CTest()
      {
       iList = new(ELeave)CArrayFixFlat< TBuf<4> >(3);
      }
     // 注意这里定义是要加一个空格,否则编译不了,
     // 或上面定义的 tb类型
     CArrayFixFlat< TBuf<4> >*  iList;
     //RArray<TBuf<4> > iList;
     void add(TDesC& ades)
      {
       
       iList->AppendL(ades);
       //iList.Append(ades);
       console->Printf(ades);
      }
     };
    LOCAL_C  void add(CTest* ac)
     {
      _LIT(KT,"aad1");
      TBuf<4> buf1(KT);
      _LIT(KT1,"bbd2");
      TBuf<4> buf2(KT1);
      _LIT(KT2,"ccd3");
      TBuf<4> buf3(KT2);
      ac->add(buf1);
      ac->add(buf2);
      ac->add(buf3);

     }

    LOCAL_C void MainL(const TDesC& aArgs)
        {
        //
        // add your program code here, example code below
        //
        //console->Write(_L("Hello, world!\n"));
        //console->Printf(_L("Command line args: \"%S\"\n"), &aArgs);
        CTest c;
        add(&c);
        /*_LIT(KT,"aad");
     TBuf<4> buf1(KT);
     _LIT(KT1,"bbd");
     TBuf<4> buf2(KT1);
     _LIT(KT2,"ccd");
     TBuf<4> buf3(KT2);
     c.add(buf1);
     c.add(buf2);
     c.add(buf3);*/
        //for(TInt i=0;i<c.iList.Count()-1;i++)
        for(TInt i=0;i<c.iList->Count()-1;i++)
      {
      TPtrC buf=(c.iList->At(i));
      //TBuf<4> buf=c.iList[i];
      //TPtrC p = &(c.iList->At(i));
      console->Write(buf);
      //console->Write(c.iList->At(i));
      }
        }

    LOCAL_C void DoStartL()
        {
        // Create active scheduler (to run active objects)
        CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
        CleanupStack::PushL(scheduler);
        CActiveScheduler::Install(scheduler);

        // Call main function with command line
        TBuf<256> cmdLine;
        RProcess().CommandLine(cmdLine);
        MainL(cmdLine);

        // Delete active scheduler
        CleanupStack::PopAndDestroy(scheduler);
        }

  • 相关阅读:
    3631: [JLOI2014]松鼠的新家
    1112: [POI2008]砖块Klo
    1935: [Shoi2007]Tree 园丁的烦恼
    4001: [TJOI2015]概率论
    1339 / 1163: [Baltic2008]Mafia
    4010: [HNOI2015]菜肴制作
    4052: [Cerc2013]Magical GCD
    2292: 【POJ Challenge 】永远挑战
    4063: [Cerc2012]Darts
    3997: [TJOI2015]组合数学
  • 原文地址:https://www.cnblogs.com/zziss/p/1762147.html
Copyright © 2020-2023  润新知