"ダミー "からの質問 - ページ 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:
一般に静的配列は、いつ、どのように使用するのかが明確ではありません。コンパイラに任せきりで、動いているようでいてエラーが出る、そんな問題には遭遇したくないようです。
そして、必要なときにこの科目、この科目を勉強するようにしていますね。そして、そのレバー(機能)を必要とする段階になったら、すぐに試してみることです。この学習方法は(私の場合)かなり効果があることがわかりました))