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」を返します。

コメント

  1. あくまでも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
    }
    ———————–

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

    AnsiStrings.hppをincludeしないとき、

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

    AnsiStrings.hppをincludeするとき、

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

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

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください