Errori, bug, domande - pagina 3020

 
A100:

Se è inizializzato, allora perché l'esecuzione

errore 4009

STRINGA ERRATA NON INIZIALIZZATA

4009

Stringa non inizializzata

È una questione di terminologia.

 
mktr8591:

Non è questo il problema, è il fatto che questo codice restituisce 4 e dovrebbe restituire 0.

Questo significa semplicemente che -1 e 0 hanno lo stesso risultato. Lo stesso risultato darà probabilmente INT_MAX e qualcos'altro.

Conoscere/conoscere alcune delle caratteristiche delle funzioni regolari va bene.
 
fxsaber:


Va bene sapere/conoscere alcune caratteristiche delle funzioni regolari.

Naturalmente. Soprattutto quando la caratteristica è un bug ))

Bene e inequivocabilmente aggiungere al ramo"Caratteristiche del linguaggio mql5..."

 
fxsaber:

Significa solo che -1 e 0 hanno lo stesso risultato.

Se pensi che questo sia logico e corretto, penso che ti faccia chiedere se la tua logica è logica

 
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:

Naturalmente. Soprattutto quando la caratteristica è un bug ))

Bene e sicuramente aggiungere al ramo"Peculiarità del linguaggio mql5...".

Modificate un po' la documentazione e non è più un bug.

Andrei Trukhanovich:

Se pensate che sia logico e corretto, penso che questo sia un motivo per riflettere sulla logica della vostra logica.

La filosofia è lontana dalla pratica.

 
Roman:

+1 non è necessario perché è richiesta una copia pulita (nessun carattere nullo finale). Se volete dimostrare che non è un bug, avete bisogno di argomenti

 
A100:

richiede una copia pulita (nessun carattere nullo finale)

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

Questo è un design molto barbuto.


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:

Modificate un po' la documentazione e non è più un bug.

La filosofia è lontana dalla pratica.

E come farà il professionista a spiegare un risultato così contraddittorio ai teorici:

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

Risultato: 4:0

Aspettativa: 0:0

O correggeranno un po' anche la documentazione? Beh, non per risolvere i bug, dopo tutto!

La mia spiegazione è semplice: c'è un bug in una di queste funzioni standard - e so anche quale

 
A100:

E come spiegherebbe un praticante un tale risultato a un teorico?

La mia spiegazione è semplice: una di queste funzioni ha un bug - e so anche quale.

Il bug è una discrepanza tra queste due funzioni, non il loro risultato, perché è solo una questione di documentazione cosa emettere quando count=0.