關於 CArrayFixFlat 與 RArray 與 CArrayPtrFlat 的測試

來源:互聯網
上載者:User

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);
    }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.