tol64: А Вы попробуйте изучать ту или иную тему по мере надобности. Вот как только дойдёте до момента в своей системе, когда Вам понадобятся те или иные "рычаги" (функции), тогда и начинайте с ними экспериментировать. Я нашёл, что такой метод изучения (в моём случае) довольно неплохо работает.)))
Да так и делаю, из инита с входными параметрами вылезти не могу :) а без массивов дальше совсем тяжко будет, проверено на 4ке.
Уберите значение из массива при объявлении. Должно быть так, как в хелпе:
И не будет никаких ошибок. Как я понял в массив помещается вся строка указанная в переменной to_split, и далее идёт извлечение подстрок.
Это то понятно. Только это потенциальные грабли.. я на эту ошибку нарвался, на самом деле, в своем коде, причем код то работает, - с ошибкой.
Вот для CopyBuffer, например, в справке
Если необходимо копировать заранее известное количество данных,
то лучше это делать в статически выделенный буфер,
чтобы избежать излишнего перевыделения памяти.
И где логика? т. е. - а какая разница с StringSplit?
А все массивы динамическими делать - памяти по итогу не напасешься, тоже шило..
upgr ArrayResize с обнулением вариант, конечно, но не нравится.
В вашем примере проблема в том что сама функция StringSplit() заботится о необходимом количестве памяти в массиве переданном как параметр.
Поэтому и получается что статический массив хоть и работает (если памяти достаточно) но вызывает ошибку так как его пытаются переразбить.
вот попробуйте вариант со статичным и распределённым динамичным массивами и станет понятно:
voidOnStart()
{
//---string to_split="мама_мыла_раму"; // строка для разбивки на подстрокиstring sep="_"; // раздедитель в виде символаushort u_sep; // код символа разделителяstring result[3]; // массив для получения строк//ArrayResize(result,3); //--- получим код разделителя
u_sep=StringGetCharacter(sep,0);
//--- разобьем строку на подстрокиint k=StringSplit(to_split,u_sep,result);
Print("GetLastError=",GetLastError()); // это я добавил чтоб видеть есть ли ошибка
//--- выведем комментарий PrintFormat("Получено строк: %d. Использован разделитель '%s' с кодом %d",k,sep,u_sep);
//--- теперь выведем все полученные строкиif(k>0)
{
for(int i=0;i<k;i++)
{
PrintFormat("result[%d]=%s",i,result[i]);
}
}
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
да, если убрать до 3 букв
дело не в этом.А Вы попробуйте изучать ту или иную тему по мере надобности. Вот как только дойдёте до момента в своей системе, когда Вам понадобятся те или иные "рычаги" (функции), тогда и начинайте с ними экспериментировать. Я нашёл, что такой метод изучения (в моём случае) довольно неплохо работает.)))
Тогда ждём ответа более компетентных товарищей.)))
Ждем :)
А лучше не ждите.)) Продолжайте эксперименты.))
Уберите значение из массива при объявлении. Должно быть так, как в хелпе:
string result[];И не будет никаких ошибок. Как я понял в массив помещается вся строка указанная в переменной to_split, и далее идёт извлечение подстрок.А лучше не ждите.)) Продолжайте эксперименты.))
Уберите значение из массива при объявлении. Должно быть так, как в хелпе:
И не будет никаких ошибок. Как я понял в массив помещается вся строка указанная в переменной to_split, и далее идёт извлечение подстрок.Это то понятно. Только это потенциальные грабли.. я на эту ошибку нарвался, на самом деле, в своем коде, причем код то работает, - с ошибкой.
Вот для CopyBuffer, например, в справке
И где логика? т. е. - а какая разница с StringSplit?
А все массивы динамическими делать - памяти по итогу не напасешься, тоже шило..
upgr ArrayResize с обнулением вариант, конечно, но не нравится.
Как я понял в массив помещается вся строка указанная в переменной to_split, и далее идёт извлечение подстрок.
В вашем примере проблема в том что сама функция StringSplit() заботится о необходимом количестве памяти в массиве переданном как параметр.
Поэтому и получается что статический массив хоть и работает (если памяти достаточно) но вызывает ошибку так как его пытаются переразбить.
вот попробуйте вариант со статичным и распределённым динамичным массивами и станет понятно:
вот попробуйте вариант со статичным и распределённым динамичным массивами и станет понятно:
Чтобы попробовать динамичный массив нужно просто раскомментировать ArrayResize(result,3); ? Если так, то при компиляции предупреждение:
Чтобы попробовать динамичный массив нужно просто раскомментировать ArrayResize(result,3); ? Если так, то при компиляции предупреждение:
разве это нерешаемая проблема ? делайте динамичным.
В вашем примере проблема в том что сама функция StringSplit() заботится о необходимом количестве памяти в массиве переданном как параметр.
Поэтому и получается что статический массив хоть и работает (если памяти достаточно) но вызывает ошибку так как его пытаются переразбить.
Так можно или нельзя применять StringSplit() со статичными массивами?
Если можно, ошибки не должно быть, если памяти достаточно. Если нельзя, - она не должна работать.