サンプルコード 一覧へ戻る

MQL5サンプルコード

【MT5(MQL5)サンプルコード】StringBufferLen

スポンサーリンク

MT4(MQL4)/MT5(MQL5)のStringBufferLen

文字列に割り当てられたバッファのサイズを取得する処理です。

int  StringBufferLen(
  string  string_var      // 文字列
  )

MT4→MT5になっても変わらず使えます。

・・・が、なぜか少し挙動が違います。

サンプルコード

void OnInit()  
{
   
   string stringbuflen = "";
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen));
   StringInit(stringbuflen,100,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   stringbuflen = "hogehoge";
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen));
   
   StringInit(stringbuflen,100,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   StringInit(stringbuflen,200,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   StringInit(stringbuflen,300,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   StringInit(stringbuflen,400,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   StringInit(stringbuflen,500,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   StringInit(stringbuflen,600,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   StringInit(stringbuflen,700,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   StringInit(stringbuflen,800,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   StringInit(stringbuflen,900,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   StringInit(stringbuflen,1000,0);
   Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(stringbuflen));
   
   return;
}

結果(MT4で実行)

文字列=,文字列バッファ=0
文字列=,文字列バッファ=121,文字列の長さ=0
文字列=hogehoge,文字列バッファ=0

文字列=,文字列バッファ=121,文字列の長さ=0
文字列=,文字列バッファ=200,文字列の長さ=0
文字列=,文字列バッファ=300,文字列の長さ=0
文字列=,文字列バッファ=400,文字列の長さ=0
文字列=,文字列バッファ=500,文字列の長さ=0
文字列=,文字列バッファ=600,文字列の長さ=0
文字列=,文字列バッファ=700,文字列の長さ=0
文字列=,文字列バッファ=800,文字列の長さ=0
文字列=,文字列バッファ=900,文字列の長さ=0
文字列=,文字列バッファ=1000,文字列の長さ=0

結果(MT5で実行)


文字列=,文字列バッファ=0
文字列=,文字列バッファ=260,文字列の長さ=0
文字列=hogehoge,文字列バッファ=0

文字列=,文字列バッファ=260,文字列の長さ=0
文字列=,文字列バッファ=260,文字列の長さ=0
文字列=,文字列バッファ=375,文字列の長さ=0
文字列=,文字列バッファ=500,文字列の長さ=0
文字列=,文字列バッファ=500,文字列の長さ=0
文字列=,文字列バッファ=750,文字列の長さ=0
文字列=,文字列バッファ=750,文字列の長さ=0
文字列=,文字列バッファ=1000,文字列の長さ=0
文字列=,文字列バッファ=1000,文字列の長さ=0
文字列=,文字列バッファ=1000,文字列の長さ=0

MT4では基本的に初期化したStringInitの設定値がそのままセットされるのですが、MT5では少しずつ切り上げられています。

なぜ・・・( ^ω^)・・・。

原因が分かったら追記しようと思います。

コメント

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