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

 
A100 #:
Ошибка при выполнении:

Результат:   7:1

Ожидалось: 7:2

Ожидал: 3:1. StringLen, видимо, при подобной инициализации иначе работает.

void OnStart()
{
  string text = "ABC" + "\0" + "DEF";
  ushort Words[];
  
  Print(StringLen(text)); // 7
  Print(StringToShortArray(text, Words)); // 8
  
  string text2 = ShortArrayToString(Words);
  
  Print(StringLen(text2)); // 3  
  Print(StringToShortArray(text2, Words)); // 4
}
 
fxsaber #:

Ожидал: 3:1. StringLen, видимо, при подобной инициализации иначе работает.

А обоснование то какое?

StringLen

Возвращает число символов в строке

        "ABC" + "\0" + "DEF"

3+1+3=7 символов - почему Вы 3 то ожидали ?

 
A100 #:

А обоснование то какое?

StringLen

Возвращает число символов в строке

3+1+3=7 символов - почему Вы 3 то ожидали ?

Выше пример специально привел, как из Words8] получается Stringlen = 3. Ноль - конец строки.

Люди специально хитрят, когда хотят байты сохранить в виде строки, чтобы не потерять информацию. Все из-за сложности хранения в строке нуля.


Думаю, для string оператор сложения складывает StringLen слагаемых. Тогда получается семь - хранится длина в private-поле, как у массивов.

 
fxsaber #:

Выше пример специально привел, как из Words8] получается Stringlen = 3. Ноль - конец строки.

Люди специально хитрят, когда хотят байты сохранить в виде строки, чтобы не потерять информацию. Все из-за сложности хранения в строке нуля.

Никаких сложностей с хранением нуля в string нет

И результат Ваше примера

        Print(StringToShortArray(text, Words)); // 8

это подтверждает

 
A100 #:

Никаких сложностей с хранением нуля в string нет

И результат Ваше примера

это подтверждает

Читайте последние строки кода.

 

Что касается функций StringToShortArray и ShortArrayToString, то в общем случае там вообще какие то случайные результаты получаются:

void OnStart()
{
    string text = "ABC" + "\0" + "DEF";
    ushort Words[];
    Print(StringToShortArray(text, Words, StringLen(text)));
    Print(ArraySize(Words));
    Print(StringLen(ShortArrayToString(Words, 0, ArraySize(Words))));
}

Результат: 8:15:10

 
fxsaber #:

Читайте последние строки кода.

Вы используете параметры по умолчанию - а для них в Документации прописан особый порядок - приведите полноценный пример

 
A100 #:

случайные результаты получаются

Нулевой символ в строке...

В общем, ошибок не вижу.

 
fxsaber #:

Нулевой символ в строке...

В общем, ошибок не вижу.

Отрицать очевидное - это Ваш конек

Нулевой символ в строке допустим согласно Документации: 

Тип string

В строку могут быть введены любые специальные символьные константы, перед которыми стоит символ обратной косой черты (\).

Название символа

Мнемокод или изображение

Запись в MQL5

Числовое значение

десятичный код

d

'\d'

десятичное число от 0 до 65535

 

MT5 Build 4209 (замечено, начиная с 4201) - не выводит название графика по его id (в предыдущих билдах работает):

long test_chart = ChartFirst();
Print("ID:" + IntegerToString(test_chart) + " CHART:" + ChartSymbol(test_chart));
Причина обращения: