« D2 バージョン 2.0.5(ベータ版) 公開 | メイン | C++Builder 2009への移植作業 その2 C++Builder 2007と2009のAnsiStringの動作の違いの調査 »

C++Builder 2009への移植作業 その1

既存のコードをC++Builder 2009へ移植してして、文字列関連の処理の変更が大きいかもしれないことに気づいた。

AnsiString text = "あいうえお";
return text.AnsiPos("う");

C++Builder 2007では「5」を返すが、
C++Builder 2009では「3」を返す。

C++Builder 2007はバイト数で計算しているのに対し、
C++Builder 2009は文字数で計算している。

文字列関連の処理は、すべて見直しが必要かも…

2009年5月28日追記
Update3で修正されました。
C++Builder 2009 Update3では「5」を返します。

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/830

コメント (4)

高橋智宏:

あくまでもAnsiStringベースで行くのなら、Delphi2009のAnsiStringsユニットのAnsiPosが使えると思います。
-----------------------
#include
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString text = "あいうえお";

int idx = text.AnsiPos("う");
ShowMessage(IntToStr(idx)); // 3

idx = Ansistrings::AnsiPos("う", text);
ShowMessage(IntToStr(idx)); // 5
}
-----------------------

山本隆:

なるほど。
AnsiStrings.hppをincludeすると、関数がC++Builder2007と同じ動作になりますね。
勉強になります。

AnsiStrings.hppをincludeしないとき、

AnsiString text = "あいうえお";
AnsiPos("う", text); //=> 3

AnsiStrings.hppをincludeするとき、

#include <AnsiStrings.hpp>
AnsiString text = "あいうえお";
AnsiPos("う", text); //=> 5

高橋智宏:

> text.AnsiPos("う");
これが3になる件、出来ましたらQCへの登録をお願いいたします。

山本隆:

QCは英語ですよね。苦手なんです。
もし可能なら高橋様にQCの登録をお願いできないでしょうか。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年10月09日 17:15に投稿されたエントリーのページです。

ひとつ前の投稿は「D2 バージョン 2.0.5(ベータ版) 公開」です。

次の投稿は「C++Builder 2009への移植作業 その2 C++Builder 2007と2009のAnsiStringの動作の違いの調査」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35