Fehler, Irrtümer, Fragen - Seite 3020

 
A100:

Wenn sie initialisiert ist, warum wird dann die Ausführung

Fehler 4009

ERR_NOTINITIALIZED_STRING

4009

Uninitialisierte Zeichenkette

Dies ist eine Frage der Terminologie.

 
mktr8591:

Das ist nicht das Problem, sondern die Tatsache, dass dieser Code 4 zurückgibt und 0 zurückgeben sollte.

Dies bedeutet lediglich, dass -1 und 0 das gleiche Ergebnis haben. Das gleiche Ergebnis wird wahrscheinlich INT_MAX und etwas anderes ergeben.

Es ist in Ordnung, wenn Sie einige der Merkmale der regulären Funktionen kennen bzw. beherrschen.
 
fxsaber:


Es ist in Ordnung, wenn Sie einige Merkmale der regulären Funktionen kennen.

Ja, natürlich. Vor allem, wenn die Funktion ein Fehler ist ))

Gut und eindeutig zum Zweig"Features of mql5language..." hinzufügen.

 
fxsaber:

Es bedeutet nur, dass -1 und 0 das gleiche Ergebnis haben.

Wenn Sie das für logisch und richtig halten, dann sollten Sie sich fragen, ob Ihre Logik logisch ist.

 
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:

Ja, natürlich. Vor allem, wenn die Funktion ein Fehler ist ))

Gut und auf jeden Fall in den Zweig"Besonderheiten der Sprache mql5..." aufnehmen.

Ändern Sie die Dokumentation ein wenig und es ist kein Fehler mehr.

Andrei Trukhanovich:

Wenn Sie das für logisch und richtig halten, ist das meiner Meinung nach ein Grund, über die Logik Ihrer Logik nachzudenken.

Die Philosophie ist weit von der Praxis entfernt.

 
Roman:

+1 ist unnötig, da eine saubere Kopie (ohne abschließende Nullzeichen) erforderlich ist. Wenn Sie beweisen wollen, dass es sich nicht um einen Fehler handelt, brauchen Sie Argumente

 
A100:

erfordert eine saubere Kopie (keine abschließenden Nullzeichen)

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

Dies ist ein sehr bärtiges Design.


WZ

#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:

Ändern Sie die Dokumentation ein wenig und es ist kein Fehler mehr.

Die Philosophie ist weit von der Praxis entfernt.

Und wie soll der Praktiker ein solch widersprüchliches Ergebnis den Theoretikern erklären?

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 );
}

Ergebnis: 4:0

Erwartung: 0:0

Oder werden sie auch die Dokumentation ein wenig korrigieren? Also doch nicht, um Fehler zu beheben!

Meine Erklärung ist einfach: Es gibt einen Fehler in einer dieser Standardfunktionen - und ich weiß sogar, in welcher

 
A100:

Und wie würde ein Praktiker einem Theoretiker ein solches Ergebnis erklären?

Meine Erklärung ist einfach: eine dieser Funktionen hat einen Fehler - und ich weiß sogar, welchen.

Der Fehler ist eine Diskrepanz zwischen diesen beiden Funktionen, nicht ihr Ergebnis, denn es ist nur eine Frage der Dokumentation, was ausgegeben werden soll, wenn count=0.