none
CString配列の合体ロジックについて RRS feed

  • 質問

  • お世話になります。

    CString2次元配列を2個合体させる関数を作成しました。これの配列引数をポインタ型(もともとポインタ型ですが・・・・・)にして、戻り値で合体配列返すのでなく、引数変数に合体配列をセットしたいです。

    下記に当初の合体関数を記載するので、修正点教えてもらえると助かります。

     

    (イメージしている関数)

    icsが入力と出力配列となる。

    またprtLlは合体対象配列

     

    int Cstemfm03Dlg:Tongue TiedumMenuRec(CString ***ics,int *ics_row,int *ics_col,CGI_S_RETURN *prtLl)

    typedef struct REC_CGI_S_RETURN   {
     struct REC_CGI_S_RETURN *next_prt;
     //struct REC_CGI_S_RETURN *prev_prt;
     char*** dataV;
     int rowno;
     int colno;
    } CGI_S_RETURN;

     

    CString** Cstemfm03Dlg:Tongue TiedumMenuRec(CString **ics,int *ics_row,int *ics_col,CGI_S_RETURN *prtLl)
    {
     /*
     メニュ配列合算
     */
     int j,k;
     CString **tmp_ics;int tmp_menu_row;int tmp_menu_col;
     // 現在メニュレコードを退避する
     tmp_menu_row=*ics_row;tmp_menu_col=*ics_col;
     tmp_ics = new CString*[tmp_menu_row];
     for(j=0;j<tmp_menu_row;j++)
     {
      tmp_ics[j] = new CString[*ics_col];
      for(k=0;k<tmp_menu_col ;k++)
      {
       tmp_ics[j][k]=ics[j][k];
      }
     }
     if(!(*ics_row==0 && *ics_col==0))
     {
      for(j=0;j<*ics_row;j++) //menuのfree
      {
       delete [] ics[j];
      }
      delete [] ics;
     }
     //合計メニュレコードを作成する
     *ics_row=tmp_menu_row+prtLl->rowno;*ics_col=prtLl->colno;
     ics = new CString*[*ics_row];
     for(j=0;j<tmp_menu_row;j++)
     {
      ics[j] = new CString[*ics_col];
      for(k=0;k<*ics_col ;k++)
      {
       ics[j][k]=tmp_ics[j][k];
      }
     }
     for(j=tmp_menu_row;j<*ics_row;j++)
     {
      ics[j] = new CString[*ics_col];
      for(k=0;k<*ics_col ;k++)
      {
       ics[j][k]=prtLl->dataV[j-tmp_menu_row][k];
      }
     }
     for(j=0;j<tmp_menu_row;j++) //menuのfree
     {
      delete [] tmp_ics[j];
     }
     delete  [] tmp_ics;

     return ics;
    }

    2007年7月26日 4:30

回答

  • 自分で作成する事が出来ましたので報告します。最初は配列数を動的にしようと思いましたが、とりあえず必要なので固定数2次元配列だったので、それで作成しました。

     

    2007年7月26日 9:12