Assertionが出ているのであれば、もっと詳しくわかってもよいと思います。
というか、せっかくAssertionが出ているのですから有効活用しましょう。
問題のDumpout.cppの位置にコメントがあると思います。
そのコメントの内容がまずヒントになります。
あと、Assertionが出て止まった時に関数の呼び出し履歴を確認してみてください。
VC++6.0ならコールスタックとなっているかもしれませんけれど。
ここをたどることでどの呼び出し時にAssertionが出ているのか把握できるはずです。
まずは状況をできるだけ正確に把握しましょう。
内容を検討するのはそれからです。
あと入力データのフォーマットに関してはそのファイルを提供する先の
事情が許すならできる限り取込負荷が少なくなるように設計した方がよいです。
ITOさんが書かれているように固定長データなら取込は格段に楽になります。
逆に可変長のデータを扱う時はその分だけ色々を考える必要があります。
もっとも今回は最大でも3ケタと決まっているなら負担はかなり減ると思いますけれど。
>内容としては、Debag Assertion Failed!というメッセージが出てきております。
>Dumpout.cppというファイルです。
たぶん、コレがビンゴかと
↓参照URL
http://www.dinop.com/vc/trace_512.html
ついで、「なんらかの区切り文字ごとに文字列をきりわけたい」ならコレ便利。
CStringT::Tokenize
http://msdn.microsoft.com/ja-jp/library/k4ftfkd2(VS.80).aspx
(VC6時代のMSDNはオンライン上に見つからなかった)
VC++6 の頃の CString には Tokenize が無いんで、見つからなくて当然。
っていうかフツーに fopen して fscanf していきゃ一番楽なんぢゃ・・・
スペース区切りなら何も考えずに fscanf(%d, &data[i]); でいけるはず。
中で使われているAfxExtractStringって関数ですけれど、
非公開な関数なんですかねぇ。
VC++6.0のMSDNで見ても出て来ないし、ネットで検索しても引っかからないんですけど。
ドキュメント化されていない関数なら積極的には使わない方が良さそうな気もします。
まあ、取り込むファイルにイレギュラーがあった時の対応を厳密にしないなら
fscanfを使う手もあるでしょうし、きちんとエラー処理したいならCString::Find等を
使って自分で分解と言う手もあるでしょう。
結局の所、何処まで厳密にエラー処理をするのかによると思います。
想定したフォーマットから外れたデータが渡された時にそんなデータ渡す方が悪いから動
作は保証しないとするのか、
出来る限りフォーマットの解析を行っておかしな時はエラーとして返すのか。
求められている物の内容によるかなと。
フォーマットが間違っている時は使う方で対処するから特に気にしなくて良いなら楽ですが、
もらったファイルのどの位置にどういうおかしな部分があると言うところまでエラーとし
て出せと言う話ならそれなりに考えないと駄目でしょう。
ひとまず、
fin.ReadString( str );
for( i = 0; i < MAX; i ++ ){
strResult = str.SpanExcluding( );
strLen = strResult.GetLength();
str.Delete( strLen + 1 );
}
で解決できました。ストリーム入出力はまだ勉強不足ですが、今回アドバイスを頂いた
ことで引き出しが増えたと思います。
Assertionも今まで意味がわからなかったのですが、これからは活用して行きたいです。
譌・