Вопросы от "чайника" - страница 34

 

Про StringSplit: почему нельзя применять статичный массив?

Пример из хелпа

string to_split="мама_мыла_раму"; // строка для разбивки на подстроки
   string sep="_";                // раздедитель в виде символа
   ushort u_sep;                  // код символа разделителя
   string result[3];               // массив для получения строк
   //--- получим код разделителя
   u_sep=StringGetCharacter(sep,0);
   //--- разобьем строку на подстроки
   int k=StringSplit(to_split,u_sep,result);
   //--- выведем комментарий 
   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]);
        }
     }
работает, но ругается 4007. Вроде и памяти должно хватать, и размер менять не надо.. непонятно.
 
Silent:

Про StringSplit: почему нельзя применять статичный массив?

Пример из хелпа

работает, но ругается 4007. Вроде и памяти должно хватать, и размер менять не надо.. непонятно.
case 4007: error_string="Недостаточно памяти для перераспределения массива либо попытка изменения размера статического массива!";
А в хелпе тоже написано "мама мыла раму"? Если ссылаетесь на пример из хелпа, то давайте и ссылку на пример.
 
tol64:
А в хелпе тоже написано "мама мыла раму"? Если ссылаетесь на пример из хелпа, то давайте и ссылку на пример.

Вы не поверите...

 
Silent:

Вы не поверите...

По ссылке нет такого, что массив объявлен string result[3]; В этом ошибка, так как:

"Недостаточно памяти для перераспределения массива либо попытка изменения размера статического массива!" 

 
tol64:
По ссылке нет такого, что массив объявлен string result[3]; В этом ошибка.
Я спросил - почему, и выделил - где (поменял).
 
Silent:
Я спросил - почему, и выделил - где (поменял).
Потому что Вы объявили массив статическим - 3. А получаемые подстроки имеют больше 3-ёх символов.
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
Silent:
Я спросил - почему, и выделил - где (поменял).
Непонятно со статичными массивами вообще, когда где как их применять. Вроде как и компилятору на откуп отдавать не хочется, и на такие вот проблемы нарываться - вроде работает, а ошибки есть.
 
tol64:
Потому что Вы объявили массив статическим - 3. А получаемые подстроки имеют больше 3-ёх символов.
Статичный [3] - это 3 (под)строки, а не 3 символа, я так думал.
 
Silent:
Статичный [3] - это 3 (под)строки, а не 3 символа, я так думал.

да, если убрать до 3 букв

2011.07.28 00:43:55     StringSplit (EURUSD,H1) _LastError 1 4007
2011.07.28 00:43:55     StringSplit (EURUSD,H1) result[2]=рам
2011.07.28 00:43:55     StringSplit (EURUSD,H1) result[1]=мыл
2011.07.28 00:43:55     StringSplit (EURUSD,H1) result[0]=мам
2011.07.28 00:43:55     StringSplit (EURUSD,H1) Получено строк: 3. Использован разделитель '_' с кодом 95
дело не в этом.
 
Silent:
Непонятно со статичными массивами вообще, когда где как их применять. Вроде как и компилятору на откуп отдавать не хочется, и на такие вот проблемы нарываться - вроде работает, а ошибки есть.
А Вы попробуйте изучать ту или иную тему по мере надобности. Вот как только дойдёте до момента в своей системе, когда Вам понадобятся те или иные "рычаги" (функции), тогда и начинайте с ними экспериментировать. Я нашёл, что такой метод изучения (в моём случае) довольно неплохо работает.)))