2019年5月8日水曜日

[MQL4] StringToCharArray() を使うと最後に '\0' が入るので注意

公式リファレンスにちゃんと書いてあるのですが、 StringToCharArray() を使うと最後に '\0'1 が入ります。

1
2
3
4
5
6
string hoge = "abc";
uchar arr_hoge[];
StringToCharArray(hoge, arr_hoge);
// arr_hoge は ['a', 'b', 'c', '\0']
Print(ArraySize(arr_hoge));
// 4

ArraySize()StringLen() のように使ったりすると不具合の原因になるので気をつけましょう2

'\0' を入れないようにするには、以下のように文字列長分変換すると良いようです。

3
4
5
6
StringToCharArray(hoge, arr_hoge, 0, StringLen(hoge));
// arr_hoge は ['a', 'b', 'c']
Print(ArraySize(arr_hoge));
// 3
  1. いわゆる ヌル文字 
  2. やらかした人がここに 
?