MT4(MQL4)/MT5(MQL5)のStringInit
指定した長さの文字列を作成し、指定した記号で埋めます。
bool StringInit(
string& string_var, // 初期化する文字列
int new_len=0, // 初期化後の文字列の長さ
ushort character=0 // 初期化に使用される記号
);
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,1);
Print("文字列=",stringbuflen,",文字列バッファ=",StringBufferLen(stringbuflen),",文字列の長さ=",StringLen(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,文字列の長さ=100
文字列=,文字列バッファ=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,文字列の長さ=100
文字列=,文字列バッファ=260,文字列の長さ=0
文字列=,文字列バッファ=260,文字列の長さ=0
文字列=,文字列バッファ=375,文字列の長さ=0
文字列=,文字列バッファ=500,文字列の長さ=0
文字列=,文字列バッファ=500,文字列の長さ=0
文字列=,文字列バッファ=750,文字列の長さ=0
文字列=,文字列バッファ=750,文字列の長さ=0
文字列=,文字列バッファ=1000,文字列の長さ=0
文字列=,文字列バッファ=1000,文字列の長さ=0
文字列=,文字列バッファ=1000,文字列の長さ=0
MT4では基本的に初期化したStringInitの設定値がそのままセットされるのですが、MT5では少しずつ切り上げられています。
なぜ・・・( ^ω^)・・・。
原因が分かったら追記しようと思います。
【参考】MQL5公式ページ
コメント / Comments