Ошибки, баги, вопросы - страница 2461

 
fxsaber:

Вот эту мысль могли бы озвучить подробнее?

Ниже мое субъективное мнение, если где-то не прав, буду рад помощи.


StringLen раньше работал O(n) до первого NULL символа (0x0000) в строке, сейчас работает O(1).
Длину строки всегда можно было обрезать через StringSetCharacter(str, pos, 0x00), но зачем-то вводят StringSetLength.

Скорее всего решали задачу ускорения кода при работе со строками.
Задачу ускорения решили, а то что половина функционала теперь работает с NULL символами в строке, а другая нет - ни кого не заботит.

#define PRINT(x) Print(#x, ":", string(x))

void OnStart(){  
   string str = "123456789";
   PRINT(str);
   PRINT(StringLen(str));
   
   PRINT(StringSetCharacter(str, 7, 0x00));
   PRINT(StringLen(str));
   
   str += "\x00" + str;
   PRINT(StringLen(str));
   
   str += str;
   PRINT(str);
   PRINT(StringLen(str));
   
   ushort array[];
   PRINT(StringToShortArray(str, array));
   ArrayPrint(array);
   
   PRINT(StringLen(str));
   PRINT(StringLen(ShortArrayToString(array)));
   PRINT(StringLen(ShortArrayToString(array, 0, StringLen(str))));
} 

Результат:

2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      str:123456789
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(str):9
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringSetCharacter(str,7,0x00):true
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(str):7
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(str):15
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      str:1234567
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(str):30
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringToShortArray(str,array):31
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      49 50 51 52 53 54 55  0 49 50 51 52 53 54 55 49 50 51 52 53 54 55  0 49 50 51 52 53 54 55  0
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(str):30
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(ShortArrayToString(array)):7
2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1)      StringLen(ShortArrayToString(array,0,StringLen(str))):7
 
Sergey Dzyublik:

Ниже мое субъективное мнение, если где-то не прав, буду рад помощи.


StringLen раньше работал O(n) до первого NULL символа (0x0000) в строке, сейчас работает O(1).
Длину строки всегда можно было обрезать через StringSetCharacter(str, pos, 0x00), но зачем-то вводят StringSetLength.

Скорее всего решали задачу ускорения кода при работе со строками.
Задачу ускорения решили, а то что половина функционала теперь работает с NULL символами в строке, а другая нет - ни кого не заботит.


Результат:

Сдерживайте пожалуйста эмоции.
В следующий раз за матерщинные намёки придётся банить - не в кабаке мы тут. Да и в кабаке - уже не модно материться.
 
Sergey Dzyublik:

StringLen раньше работал O(n) до первого NULL символа (0x0000) в строке, сейчас работает O(1)

Просто частично исправили ошибки ... почему бы и нет!? На моей памяти StringLen всегда работал правильно (по крайней мере в x32)
 
Sergey Dzyublik:
Разработчикам:
Прошу добавить возможность указания принудительной генерации кода для оператора присвоения (конструктор копирования) по умолчанию:

Что то как-то сложно. Проще по аналогии с конструктором по умолчанию:

1) любой оператор присваивания отменяет оператор присваивания по умолчанию

2) любой оператор копирования отменяет оператор копирования по умолчанию

 
A100:
Просто частично исправили ошибки ... почему бы и нет!?

По тому что в MQL нет целостной идеи при работе со строками с NULL символами в этом и проблема.
Например StringToShortArray поддерживает NULL символы в строке, а обратная ей функция ShortArrayToString  уже нет...

В результате, больше времени уходит на отлов багов и поиск workaround-ов, чем на решение конкретных задач.

 
A100:

Что то как-то сложно. Проще по аналогии с конструктором по умолчанию:

1) любой оператор присваивания отменяет оператор присваивания по умолчанию

2) любой оператор копирования отменяет оператор копирования по умолчанию

Мне не нужна отмена, нужна наоборот принудительная генерация. 
В MQL нет функционала на deep copy сложных типов, а в операторе присваивания и конструкторе копирования они реализованы по дефолту.

 
Sergey Dzyublik:

По тому что в MQL нет целостной идеи при работе со строками с NULL символами в этом и проблема.
Например StringToShortArray поддерживает NULL символы в строке, а обратная ей функция ShortArrayToString  уже нет...

С одной стороны да, с другой стороны об этом явно указано в Документации: "либо до встречи терминального 0"

 
Sergey Dzyublik:
ну как бы изначально непонятно зачем нуль-строки из плюсов тащили.
 
A100:

С одной стороны да, с другой стороны об этом явно указано в Документации (что нет)

А в StringToShortArray написано то же:

 Количество элементов массива для копирования. Определяет длину результатной строки. По умолчанию -1, что означает копирование до конца массива, либо до встречи терминального 0.

Однако это не мешает ему адекватно обрабатывать NULL символы в строке.

 
Здравствуйте. Мобильная версия MT5 не подключается к брокеру Alpari. В чем дело? Когда-то это будет устранено?
Причина обращения: