Errori, bug, domande - pagina 3021

 
fxsaber:

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

No, esiste anche il principio di uniformità. il bug è ovvio. se non capisci perché è un bug, è un tuo problema.

 
fxsaber:

Il bug è la mancata corrispondenza tra le due funzioni, non il loro risultato, poiché è solo una questione di documentazione su cosa emettere quando count=0.

Forum sul trading, sistemi di trading automatico e test di strategia

Errori, bug, domande

Romano, 2021.05.07 22:07

Tutto il trucco è nella descrizione della funzione ))

[in]  Количество элементов массива для копирования. Определяет длину результатной строки. 
По умолчанию -1, что означает копирование до конца массива, либо до встречи терминального 0. 
Терминальный 0 также будет скопирован в массив-приемник, 
при этом размер динамического массива может быть увеличен при необходимости под размер строки. 
Если размер динамического массива больше длины строки, то размер массива уменьшен не будет. 

progresso automatico ))
cosa confonde di più l'utente.

A100:

E come potrebbe un praticante spiegare un risultato così contraddittorio ai teorici?

Risultato: 4:0

Atteso: 0:0

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

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


 
Roman:

Dopo di che gli sviluppatori hanno giàcorretto, quindi la tua spiegazione precedente non va bene

Le funzioni sono le stesse (differiscono solo nel tipo, infatti il template), la descrizione è la stessa (ci sono anche riferimenti incrociati), ma il risultato è diverso

 
A100:

Gli sviluppatori l'hanno già risolto, quindi la tua spiegazione precedente non funziona

Cosa è stato sistemato esattamente?
È sempre stato così nella documentazione.

str1

str1


Hai controllato cosa è stato aggiustato? ))
Aggiustato, diviso come volevi.
3 caratteri, per esempio.

char ch[];
int str = StringToCharArray( "ABCDEF", ch, 0, 3 );
    
Print("StringToCharArray "+(string)str);
Print("ch[] ",CharToString(ch[0]), CharToString(ch[1]), CharToString(ch[2]));
Print("GetLastError ", GetLastError());         

2021.05.25 02:08:33.329 Test (AUDUSD,M1)   StringToCharArray 3
2021.05.25 02:08:33.329 Test (AUDUSD,M1)   ch[] ABC
2021.05.25 02:08:33.329 Test (AUDUSD,M1)   GetLastError 0

Ma se passate 0 in count, l'intera stringa con uno zero finale sarà copiata automaticamente.
Anche se la stringa è vuota, uno zero finale sarà copiato.

char ch[];
int str = StringToCharArray( "", ch, 0, 0 );
    
Print("StringToCharArray "+(string)str);
2021.05.25 02:24:47.161 Test (AUDUSD,M1)   StringToCharArray 1
E StringLen() non restituisce uno zero finale ))
 
Roman:

Cosa avete riparato esattamente?

Ma se si passa 0 al conteggio, l'intera stringa con uno zero finale sarà copiata automaticamente.
Anche se la stringa è vuota, lo zero finale sarà copiato.

Perché è diverso inStringToShortArray? Per favore, spiega in breve, se possibile, senza trucchi e riferimenti oscuri alle tue precedenti brillanti spiegazioni (che alla fine hanno fallito) - in termini semplici - per un dummie

senza ; ) e altri simboli inappropriati in questo argomento.

 
A100:

Perché è diverso inStringToShortArray? Per favore, spiega in breve, se possibile, senza trucchi e riferimenti incomprensibili alle tue precedenti brillanti spiegazioni (che alla fine hanno fallito) - in termini semplici - per un dummie

senza ; ) e altri simboli irrilevanti in questo argomento.

Opere divise

ushort sh[];
int str = StringToShortArray( "ABCDEF", sh, 0, 3 );
    
Print("StringToShortArray "+(string)str);
Print("sh[] ",ShortToString(sh[0]), ShortToString(sh[1]), ShortToString(sh[2]));
Print("GetLastError ", GetLastError()); 
2021.05.25 03:10:07.696 Test (AUDUSD,M1)   StringToShortArray 3
2021.05.25 03:10:07.696 Test (AUDUSD,M1)   sh[] ABC
2021.05.25 03:10:07.696 Test (AUDUSD,M1)   GetLastError 0

Non so perché il conteggio 0 non funziona.
Forse questo automatico intelligente sul conteggio 0 non funziona qui, e secondo l'aiuto, è già un mismatch.
E deve essere un errore.

ushort sh[];
int str = StringToShortArray( "ABCDEF", sh, 0, 0 );
    
Print("StringToShortArray "+(string)str);
//Print("sh[] ",ShortToString(sh[0]), ShortToString(sh[1]), ShortToString(sh[2]));
Print("GetLastError ", GetLastError()); 
2021.05.25 03:12:00.176 Test (AUDUSD,M1)   StringToShortArray 0
2021.05.25 03:12:00.176 Test (AUDUSD,M1)   GetLastError 0

Comunque, o c'è un errore qui chenon funziona sulconteggio 0,
o c'è un errore in StringToCharArray che
funzionasulconteggio 0.

Per farvi capire la solidità delle spiegazioni, studiate le basi del linguaggio C, specialmente la gestione delle stringhe.
Allora non ci saranno domande.

 
Roman:

In breve, o c'è un errore qui che il conteggio 0 non funziona,
o c'è un errore in StringToCharArray che il conteggio 0 funziona.

Geniale!

 
A100:

Geniale!

Certo che è geniale. L'aiuto non rivela esplicitamente la gestione delconteggio 0.
Ma se si gira la testa, passare una dimensione zero all'array e allocare zero memoria ad esso è strano, per usare un eufemismo.
Ecco perché ilconteggio 0 fa scattare il ridimensionamento automatico fino alla fine della stringa.
Per logica, dovrebbe funzionare anche in StringToShortArray.
L'errore sarebbe stato restituito meglio, senza alcun ridimensionamento.
 
Roman:
Certo che è geniale. La guida non rivela esplicitamente la gestione delconteggio 0.
Ma se si gira la testa, passare una dimensione di array pari a zero e allocare zero memoria ad essa è strano, per usare un eufemismo.
Ecco perché il conteggio 0 fa scattare il ridimensionamento automatico fino alla fine della stringa.
Per logica, dovrebbe funzionare anche in StringToShortArray.
È meglio che restituiscano un errore senza alcun ridimensionamento.

E in

CharArrayToString

Perché non fino alla fine?

void OnStart()
{
    const uchar array[] = { 'A', 'B', 'C' };
    const int start = 0, count = 0;
    Print(CharArrayToString( array, start, count ));
}

Risultato: ""

 
A100:

E in

Perché non fino alla fine?

Risultato: ""

Probabilmente perché non c'è un array dinamico [out] inCharArrayToString.
E lo sviluppatore ha deciso che questo non era necessario.
Anche se una logica diversa in funzioni simili provoca più confusione.

Motivazione: