【MQL5】StringBufferLen関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

StringBufferLen関数の働き・役割

StringBufferLen関数は、指定された文字列に割り当てられたバッファのサイズを返します。バッファとは、データを一時的に保存するためのメモリ領域のことです。

この関数を使用すると、文字列の現在のバッファサイズを確認でき、メモリ管理やパフォーマンス最適化に役立てることができます。

文字列型のバッファの仕組み

MQL5では、文字列変数は、データを保持するための「メモリバッファを持っています。

新しい文字列を追加するとき、既存のバッファサイズが十分でない場合、システムは自動的に新しい大きなメモリ領域を割り当て、そこにデータをコピーします。

このプロセスをメモリの再割り当てと呼びます。

バッファサイズが十分であれば、メモリの再割り当ては行われません。この仕組みは、メモリの効率的な使用とパフォーマンスの最適化に寄与します

StringBufferLen関数の戻り値について

StringBufferLen関数戻り値は以下の通りです:

定数についての詳細は↓の記事をご参照ください

  • -1:-1が返される場合、文字列MetaTrader5のシステムによって管理されていることを意味します。
    MetaTrader5のシステムによって管理されている文字列は、通常、プラットフォームの内部で使用される定義済みの文字列です。
    これらの文字列は直接操作することを想定していないため、バッファの内容を変更する試みは意図しない動作を引き起こす可能性があります。
    例えば、エラーメッセージやシステムログに使用される固定のメッセージがあります。これらのメッセージはプログラムの他の部分で参照される可能性があるため、これらの文字列の内容を変更すると、プログラム全体に影響を与える可能性があります。このような場合、StringBufferLen関数は-1を返します。
  • 正の整数:割り当てられたバッファのサイズ(文字数)。

StringBufferLen関数を使ったサンプルコード

以下は、StringBufferLen関数を使って文字列バッファサイズを取得するサンプルコードです。

// スクリプトの実行開始時に自動的に呼び出されるOnStart関数
void OnStart()
{
    // 文字列を定義
    string a = "こんにちは";
    string b = "世界";
    
    // StringBufferLen関数を使用してバッファサイズを取得
    Print("before: StringBufferLen(a) = ", StringBufferLen(a), 
          "  StringLen(a) = ", StringLen(a));
    
    // 文字列を追加
    for(int i = 0; i < 1000; i++)
    {
        StringAdd(a, b);
    }
    
    // 文字列追加後のバッファサイズを取得
    Print("after: StringBufferLen(a) = ", StringBufferLen(a), 
          "  StringLen(a) = ", StringLen(a));
}

このサンプルコードでは、StringBufferLen関数を使用して「こんにちは」という文字列バッファサイズを取得し、その後「世界」を1000回追加してから再度バッファサイズを確認しています。結果はエキスパートログに出力されます。

<参照>

StringAdd関数/StringCompare関数/StringLen関数/StringConcatenate関数/StringFill関数/StringInit関数/StringFind関数/StringGetCharacter関数/StringSetLength関数/StringReplace関数/StringReserve関数/StringSetCharacter関数/StringSplit関数/StringSubstr関数/StringToLower関数/StringToUpper関数/StringTrimLeft関数/StringTrimRight関数

タイトルとURLをコピーしました