来自一个 "傻瓜 "的问题 - 页 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:

你不会相信...

没有这样一个数组声明的字符串 result[3]; 链接中有一个错误,因为。

"没有足够的内存来重新分配阵列,或者试图调整静态阵列的大小!"

 
tol64:
没有一个数组声明的字符串 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:
一般来说,对于静态数组,何时以及如何使用它们并不清楚。看来,我不想让编译器听之任之,也不想遇到这样的问题--似乎可以工作,但有错误。
而你在需要的时候尝试学习这个或那个科目。一旦你在你的系统中达到需要这些或那些 "杠杆"(功能)的地步,那么就开始尝试使用它们。我发现这种学习方法(就我而言)相当有效。)