• 締切済み

CString のGetAt で正しく文字が取れない

こんにちは。 以下のプログラムで s1 = "3ba9e...."の時、 for(i=0; i < (int)(s1Len/2); i++) {   cc = s1.GetAt(2*i);   c2 = s1.GetAt(2*i+1); } 1回目 cc=3 c2=0, 2回目 cc=a c2=b ・・・ という順序で取られていきます。 不思議な事にデバッグビルドでは正しく取られるのに、リソースビルドでこの現象がおきるのです。 解決策、あるいは回避策をご存知の方、ご教授願えないでしょうか。困っています。 ちなみに c2 = s1.GetAt(2*i+3) としたところ、1回目だけが正しく取れず cc=3 c2=0, 2回目以降は正しく取れました。

みんなの回答

  • orc-orca
  • ベストアンサー率68% (15/22)
回答No.1

 うーん,わたしなら,OutputDebugString()とかで,i, s1, cc, c2 等のトレースを取りながら実行してみます.前スレによると,これはあるコードの一部を抜き出したもののようなので,他のコードが悪影響している可能性があるからです. # GetAt() がリリース時に範囲チェックを行なわないのは,単純に速度を重視したためでしょう.

参考URL:
http://www.nitoyon.com/vc/tutorial/debug/win32.htm
hibachi
質問者

補足

回答ありがとうございます。 チェックした結果、ccとc2のアドレスが隣り合っていた事 + '\0'が終端に確保されていなかった為に、変数使用側で誤作動を起こしていたと思われます。失礼しました。

関連するQ&A

専門家に質問してみよう