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

 
Vict:

ЗЫ: может не связываться со строками вообще? сохраняйте в wchar_t массивы и гоняйте их, а внутри мкл конвертировать в строку если надо

О, сенкю )), за подсказку, что wcsncpy обрезает ноль.
Да массивы оставил на последок, если не получится с указателями, то буду юзать массивы.

 

Движок форума не позволяет сделать пост из одной картинки. Требует ввода текста.

Приходится ставить пробел.

 
fxsaber:

Движок форума не позволяет сделать пост из одной картинки. Требует ввода текста.

Приходится ставить пробел.

Вроде всё логично: это форум и главное это текст. А картинка прикладывается по сколько постольку. Здесь ведь не кладбище картинок.

 

дописал код, работает в MT4/5, столкнулся небольшой неожиданностью

а чем в MQL4  можно заменить TesterStop()

?

 
Igor Makanu:

а чем в MQL4  можно заменить TesterStop()?

ExpertRemove.

 
fxsaber:

ExpertRemove.

этот вариант знаю, но видел сообщения, что ExpertRemove(0 нельзя для экспертов для Маркета использовать, может соберусь в Маркет выложить, придется опять переделывать

в общем использую TesterStop() в двух случаях:

- вместо INIT_PARAMETERS_INCORRECT , чтобы скрыть лог оптимизатора

- если недостаточно средств для открытия ордера, ордер то не открываю, а тест завершаю, что оптимизация быстрее шла

 
Igor Makanu:

этот вариант знаю

Тогда деление на ноль.

 
fxsaber:

Тогда деление на ноль.

пн...была надежда, но как всегда только хардкор )))

 
Vict:

ЗЫ: может не связываться со строками вообще? сохраняйте в wchar_t массивы и гоняйте их, а внутри мкл конвертировать в строку если надо https://www.mql5.com/ru/docs/convert/shortarraytostring

Согласен

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

WinAPI -> MQL5 x64

A100, 2018.05.29 14:11

Все правило было сказано. Если вы хотите чтобы работало всегда - нужно использовать ushort, а если вы хотите разбираться почему вдруг со string перестало работать (то что работало еще вчера) - то можно и string

 
Vict:

тут вы выходите за границы out


Вы навели меня на мысль проверить длину инициализированной строки в StringInit(out, 165, 32);

Справка StringInit гласит, что вторым параметром является длина строки, длина строки в моём понимании это количество символов строки.
В моём случае входящая строка имеет 164 символа, по этому во второй параметр я ставил 165, пробовал и больше *2, 330.

Используя memcpy_s с указателем,

memcpy_s(out, wcslen(data) * sizeof(wchar_t*), data, wcslen(data) * sizeof(wchar_t*));

результат был один, конец строки всегда плывёт по количеству символов, и при парсинге бывают утечки. 
Без указателя строка тоже плывёт.

Но вот вы натолкнули меня на мысль, и в StringInit(out, 1400, 32) я поставил не длину строки, а размер в байтах указателя.
И о чудо, строка стала без лишних выводимых символов, без проблем парсится, и не одной утечки.
Хочу заметить что именно с указателем в sizeof, без указателя строка плывёт.

Напрашивается вопрос к разработчикам, а корректна ли справка по StringInit  ???
Не перепутано ли, в справке или в самой функции StringInit, длина строки с размером строки?
В общем сейчас если использовать memcpy то корректно работает, если передаёшь размер указателя, и StringInit инициализируешь этим размером, а не длиной!