오류, 버그, 질문 - 페이지 3020

 
A100 :

초기화된 경우 왜 실행 시

오류 4009 발생

ERR_NOTINITIALIZED_STRING

4009

초기화되지 않은 문자열

이것은 용어의 문제입니다.

 
mktr8591 :

문제는 이것에 있는 것이 아니라 이 코드가 4를 반환하지만 0을 반환해야 한다는 사실에 있습니다.

이는 -1과 0이 동일한 결과를 갖는다는 것을 의미합니다. 같은 결과는 아마도 INT_MAX 와 다른 것을 줄 것입니다.

일반 기능의 일부 기능을 알고/배우는 것은 정상입니다.
 
fxsaber :


일반 기능의 일부 기능을 알고/배우는 것은 정상입니다.

틀림없이. 특히 기능이 버그인 경우))

글쎄, " mql5 언어의 특징 ..." 브랜치에 명확하게 추가하십시오.

 
fxsaber :

이는 -1과 0이 동일한 결과를 갖는다는 것을 의미합니다.

당신의 의견이 논리적이고 옳다면 나에게 이것은 당신의 논리의 논리에 대해 생각할 기회입니다

 
const string text[] = { "ABC", "", "ABC" };    
uchar array[];
    
int start = 0;
int n     = 0;
    
for(int i=0; i < ArraySize(text); i++)
{
   const int count = StringLen(text[i])+1;
   Print(count);
        
   n += StringToCharArray(text[i], array, start, count);
   start += count;
}
    
Print(ArraySize(array), ":", n );
2021.05.24 22:56:35.959 Test (AUDUSD,M5) 4
2021.05.24 22:56:35.959 Test (AUDUSD,M5) 1
2021.05.24 22:56:35.959 Test (AUDUSD,M5) 4
2021.05.24 22:56:35.959 Test (AUDUSD,M5) 9:9
 
mktr8591 :

틀림없이. 특히 기능이 버그인 경우))

글쎄, " mql5 언어의 특징 ..." 브랜치에 명확하게 추가하십시오.

문서를 약간 수정하면 더 이상 버그가 아닙니다.

안드레이 트루하노비치 :

당신의 의견이 논리적이고 옳다면 나에게 이것은 당신의 논리의 논리에 대해 생각할 기회입니다

철학은 실천과 거리가 멀다.

 
Roman :

+1은 깨끗한 사본(뒤에 널 문자 없음)이 필요하므로 필요하지 않습니다. 이것이 버그가 아님을 증명하려면 인수가 필요합니다.

 
A100 :

깨끗한 사본 필요(후행 null 문자 없음)

 if ( StringLen (text[i]))
  start += StringToCharArray (text[i], array, start, StringLen (text[i]));

이것은 매우 수염이 있는 디자인입니다.


추신

 #include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

const string text[] = { "ABC" , "" , "ABC" }; 

void OnStart ()
{
   ArrayPrint (_R(text).Bytes); // Побайтовое представление массива.
  
   string Str;  
  _W(Str) = text;
  
   ArrayPrint (_R(Str).Bytes); // Побайтовое представление объединенной строки.
}
 
fxsaber :

문서를 약간 수정하면 더 이상 버그가 아닙니다.

철학은 실천과 거리가 멀다.

그리고 실천가는 이론가들에게 그러한 모순된 결과를 어떻게 설명합니까?

 void OnStart ()
{
     string text = "ABC" ;
     const int start = 0 , count = 0 ;
     uchar array1[]; int n1 = StringToCharArray (  text, array1, start, count );
     short array2[]; int n2 = StringToShortArray ( text, array2, start, count );
     Print ( n1, ":" , n2 );
}

결과: 4:0

예상: 0:0

또는 - 문서를 약간 수정하시겠습니까? 글쎄, 결국 버그를 수정하지 마십시오!

내 설명은 간단합니다. 이러한 일반 기능 중 하나에 버그가 있습니다.

 
A100 :

그리고 실무자는 이론가들에게 그러한 결과를 어떻게 설명합니까?

내 설명은 간단합니다. 이 기능 중 하나에 버그가 있습니다.

버그는 결과가 아니라 이 두 함수 간의 불일치입니다. count=0일 때 무엇을 출력할지 문서화하는 문제일 뿐입니다.