- ベストアンサー
配列のサイズを動的に指定したい。
現在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を使用しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VC6のころのC言語でそういう配列は作れませんので、 サイズぴったりにこだわるなら、配列ではなく いわゆる動的配列(std::vectorやstd::string、CStringArray等)やnew[]等を使ってください。
その他の回答 (1)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★配列サイズが固定ならば、ポインタ配列でどう? ・読み込んだ『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 ); } } 最後に: ・分からなかったらもう一度質問してね。 ・以上。おわり。
補足
VC6以降では可能なのでしょうか? VisualStudioを.NET2003 や 2005にバージョンアップすることは可能なのですが・・・。