• ベストアンサー

配列のサイズを動的に指定したい。

現在FeliCaを使ったプログラムを作っているのですが、 FeliCaから読み込んだデータを各配列にサイズぴったりで格納したいんですが、読み込むデータによって配列のサイズが違うため、あらかじめ配列のサイズを指定しておくことができません。  例1「012 34567 89]    例2「01 2345678 9」   a[3]=012           a[2]=01   b[5]=34567          b[7]=2345678   c[2]=89            c[1]=9 というように空白で区切った文字列を各配列に格納したいのです。 なにか良い方法はないでしょうか? ソフトはVisualStudio6.0を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

VC6のころのC言語でそういう配列は作れませんので、 サイズぴったりにこだわるなら、配列ではなく いわゆる動的配列(std::vectorやstd::string、CStringArray等)やnew[]等を使ってください。

shu0325
質問者

補足

VC6以降では可能なのでしょうか? VisualStudioを.NET2003 や 2005にバージョンアップすることは可能なのですが・・・。

その他の回答 (1)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★配列サイズが固定ならば、ポインタ配列でどう? ・読み込んだ『012 34567 89』データを別な場所にコピーして、  区切り文字の空白をNULL文字に変換します。これと同時に  ポインタ配列へ『012』、『34567』、『89』の先頭ポインタを  セットしていけばメモリを節約できます。分かりますか? ・配列ぴったりで格納したいのですよね。 ●サンプル void Func( char data[] ) ←読み込んだ『012 34567 89』データを渡す {  char *list[ 100 ]; ←最大 100 個のトークがあるとする場合  char *buff;  char *find;  char **p = list;    if ( (buff = (char *)malloc(strlen(data) + 1)) != NULL ){   strcpy( buff, data );      for ( find = buff ; *find != '\0' ; ){    for ( *p++ = find ; *find != '\0' ; find++ ){     if ( *find == 0x20 ){ ←空白文字(区切り文字)      *find++ = '\0';      break;     }    }   }   *p = NULL; ←リストの最後を表すコツ。   /*   list配列が次のようになる。   list[0] ⇒ a[3 + 1]="012"   list[1] ⇒ b[5 + 1]="34567"   list[2] ⇒ c[2 + 1]="89"   list[3] ⇒ NULL ポインタで最後の要素を表す   */   free( buff );  } } 最後に: ・分からなかったらもう一度質問してね。 ・以上。おわり。

関連するQ&A