찻주전자의 질문 - 페이지 35

 
Silent :

네, 최대 3글자를 삭제하면

그것은 요점이 아니다.

그런 다음 우리는 더 유능한 동지들의 답변을 기다리고 있습니다.)))
 
tol64 :
그리고 당신은 필요에 따라 이것 또는 그 주제를 공부하려고 노력합니다. 시스템에서 특정 "레버"(기능)가 필요한 순간에 도달하는 즉시 이를 사용하여 실험을 시작하십시오. 나는 이 학습 방법(제 경우)이 꽤 잘 작동한다는 것을 발견했습니다.)))
예, 그렇게 합니다. 입력 매개변수를 사용하여 초기화에서 벗어날 수 없습니다. :) 배열이 없으면 더 어려울 것입니다. 4k에서 확인했습니다.
 
tol64 :
그런 다음 우리는 더 유능한 동지들의 답변을 기다리고 있습니다.)))
우리는 기다립니다 :)
 
Silent :
우리는 기다립니다 :)

기다리지 않는 것이 좋습니다.)) 실험을 계속하십시오.))

선언할 때 배열에서 값을 제거합니다. 도움말과 같아야 합니다.

 string result[];
그리고 실수가 없을 것입니다. 내가 알기로는 to_split 변수에 지정된 전체 문자열이 array 배치된 다음 부분 문자열이 추출 됩니다.
Документация по MQL5: Строковые функции / StringSubstr
Документация по MQL5: Строковые функции / StringSubstr
  • www.mql5.com
Строковые функции / StringSubstr - Документация по MQL5
 
tol64 :

기다리지 않는 것이 좋습니다.)) 실험을 계속하십시오.))

선언할 때 배열에서 값을 제거합니다. 도움말과 같아야 합니다.

그리고 실수가 없을 것입니다. 내가 알기로는 to_split 변수에 지정된 전체 문자열이 array 배치된 다음 부분 문자열이 추출 됩니다.

이것은 이해할 수 있습니다. 이것은 잠재적 인 갈퀴입니다 .. 사실 내 코드에서이 오류가 발생했으며 코드는 오류와 함께 작동합니다.

예를 들어 도움말에서 CopyBuffer용입니다.

Если необходимо копировать заранее известное количество данных,
то лучше это делать в статически выделенный буфер,
чтобы избежать излишнего перевыделения памяти.

그리고 논리는 어디에 있습니까? 즉 - StringSplit과의 차이점은 무엇입니까?

그리고 모든 배열을 동적으로 만들려면 결국 충분한 메모리를 얻지 못할 뿐만 아니라 상처를 주기도 합니다.

0으로 하는 upgr ArrayResize는 물론 옵션이지만 내 취향은 아닙니다.

 
tol64 :

내가 알기로는 to_split 변수에 지정된 전체 문자열이 array 배치된 다음 부분 문자열이 추출 됩니다.

아니, 그럴 수 없어.
 
Silent :

귀하의 예에서 문제는 StringSplit() 함수 자체가 매개변수로 전달된 배열에서 필요한 양의 메모리를 처리한다는 것입니다.

따라서 정적 배열 은 작동하지만(메모리가 충분한 경우) 다시 분할하려고 하기 때문에 오류가 발생합니다.

여기에서 정적 및 분산 동적 배열을 사용하여 옵션을 시도하면 명확해집니다.

 void OnStart ()
  {
//---
   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: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Urain :

여기에서 정적 및 분산 동적 배열을 사용하여 옵션을 시도하면 명확해집니다.

동적 배열을 시도하려면 ArrayResize (result,3)의 주석 처리를 제거하십시오. ? 그렇다면 컴파일 경고:

 
tol64 :

동적 배열을 시도하려면 ArrayResize(result,3); 주석 처리를 제거하면 됩니다. ? 그렇다면 컴파일 경고:


이것은 해결할 수 없는 문제입니까? 역동적으로 만듭니다.
 
Urain :

귀하의 예에서 문제는 StringSplit() 함수 자체가 매개변수로 전달된 배열에서 필요한 양의 메모리를 처리한다는 것입니다.

따라서 정적 배열 은 작동하지만(메모리가 충분한 경우) 다시 분할하려고 하기 때문에 오류가 발생합니다.

따라서 StringSplit()을 정적 배열과 함께 사용할 수 있습니까?

가능하면 메모리가 충분하면 오류가 없어야 합니다. 그렇지 않으면 작동하지 않아야 합니다.