Erros, bugs, perguntas - página 3021

 
fxsaber:

O bug é a discrepância entre as duas funções, não o resultado, porque é apenas uma questão de documentação o que deve sair quando contar=0.

Não, também existe o princípio da uniformidade. o insecto é óbvio. se não compreende porque é que é um insecto, esse é o seu problema.

 
fxsaber:

O bug é o desencontro entre as duas funções, não o seu resultado, uma vez que é apenas uma questão de documentação o que deve sair quando contar=0.

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Erros, Erros, Perguntas

Roman, 2021.05.07 22:07

O truque está todo na descrição da função ))

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

progresso automático ))
o que confunde mais o utilizador.

A100:

E como é que um praticante explicaria um resultado tão contraditório aos teóricos?

Resultado: 4:0

Resultado esperado: 0:0

Ou também - para corrigir um pouco a documentação? Bem, afinal não para corrigir bugs!

A minha explicação é simples: uma destas funções padrão tem um bug - e eu até sei qual delas


 
Roman:

Depois disso, os Desenvolvedores jácorrigiram, pelo que a sua explicação anterior não é boa

As funções são as mesmas (diferem apenas no tipo, de facto o modelo), a descrição é a mesma (há até referências cruzadas), mas o resultado é diferente

 
A100:

Os Desenvolvedores já o corrigiram, pelo que a sua explicação anterior não funciona

O que foi exactamente fixado?
Tem sido sempre como está na documentação.

str1

str1


Verificou o que foi fixado? ))
Fixado, dividido como queria.
3 caracteres, por exemplo.

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

Mas se passar 0 para a contagem, a cadeia completa com um zero final será copiada automaticamente.
Mesmo que a cadeia esteja vazia, um zero final será copiado.

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() não devolve um zero final ))
 
Roman:

O que é que arranjou exactamente?

Mas se passar 0 para contar, a cadeia completa com um zero final será copiada automaticamente.
Mesmo que a cadeia esteja vazia, o zero final será copiado.

Porque é que é diferente emStringToShortArray? Explique em resumo, se possível, sem quaisquer truques e referências obscuras às suas explicações brilhantes anteriores (que falharam no final) - em termos simples - para um manequim

sem ; ) e outros símbolos inapropriados neste tópico.

 
A100:

Porque é que é diferente emStringToShortArray? Explique em resumo, se possível, sem quaisquer truques e referências incompreensíveis às suas explicações brilhantes anteriores (que falharam no final) - em termos simples - para um manequim

sem ; ) e outros símbolos irrelevantes neste tópico.

Trabalhos divididos

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

Não sei porque é que a contagem 0 não funciona.
Talvez este automático inteligente na contagem 0 não funcione aqui, e de acordo com a ajuda, já é um desajuste.
E deve ser um erro.

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

De qualquer forma, ou há aqui um erro quenão funciona nacontagem 0,
ou há um erro no StringToCharArray que
funcionanacontagem 0.

Para o fazer compreender a solidez das explicações, estudar as noções básicas da linguagem C, especialmente o manuseamento de cordas.
Então não haverá perguntas.

 
Roman:

Em resumo, ou há aqui um erro que conta 0 não funciona,
ou há um erro no StringToCharArray que conta 0 funciona.

Brilhante!

 
A100:

Brilhante!

É claro que é genial. A ajuda não revela explicitamente a manipulação dacontagem 0.
Mas se virar a cabeça, passar um tamanho zero para a matriz e atribuir-lhe memória zero é estranho, para o dizer de forma suave.
É por isso quea contagem 0 desencadeia o redimensionamento automático até ao fim do fio.
Por lógica, deve funcionar também em StringToShortArray.
O erro teria sido melhor devolvido, sem qualquer redimensionamento.
 
Roman:
É claro que é genial. A ajuda não revela explicitamente o manuseamento dacontagem 0.
Mas se virar a cabeça, passar um tamanho de matriz zero e atribuir-lhe memória zero é estranho, para o dizer de forma suave.
É por isso que a contagem 0 desencadeia o redimensionamento automático até ao fim do fio.
Por lógica, deve funcionar também em StringToShortArray.
É melhor devolverem um erro sem qualquer redimensionamento.

E em

CharArrayToString

Porque não todo o caminho até ao fim?

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

Resultado: """.

 
A100:

E em

Porque não todo o caminho até ao fim?

Resultado: """.

Provavelmente porque não existe uma matriz dinâmica [out] emCharArrayToString.
E o promotor decidiu que isto era desnecessário.
Embora lógicas diferentes em funções semelhantes causem mais confusão.