Erros, bugs, perguntas - página 3020

 
A100:

Se é rubricada, então porque é que a execução

erro 4009

ERR_NOTINITIALIZED_STRING

4009

Cadeia não inicializada

Esta é uma questão de terminologia.

 
mktr8591:

O problema não é esse, é o facto de este código devolver 4 e dever devolver 0.

Isto significa apenas que -1 e 0 têm o mesmo resultado. O mesmo resultado irá provavelmente dar INT_MAX e algo mais.

Conhecer/conhecer algumas das características das funções regulares é óptimo.
 
fxsaber:


Não há problema em conhecer/ conhecer algumas características de funções regulares.

Claro que sim. Especialmente quando a característica é um bug ))

Bem e inequivocamente adicionar ao ramo"Características da linguagem mql5..."

 
fxsaber:

Isto significa apenas que -1 e 0 têm o mesmo resultado.

Se pensa que isto é lógico e correcto, penso que o faz pensar se a sua lógica é lógica

 
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:

Claro que sim. Especialmente quando a característica é um bug ))

Bem e definitivamente acrescentar ao ramo"Peculiaridades da linguagem mql5...".

Afinar um pouco a documentação e já não é um bug.

Andrei Trukhanovich:

Se pensa que é lógico e correcto, penso que esta é uma razão para pensar sobre a lógica da sua lógica.

A Filosofia está longe de ser prática.

 
Roman:

+1 é desnecessário porque é necessária uma cópia limpa (sem pôr fim aos caracteres nulos). Se quer provar que não é um insecto, precisa de argumentos

 
A100:

requer uma cópia limpa (sem caracteres nulos terminantes)

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

Este é um desenho muito barbudo.


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:

Afinar um pouco a documentação e já não é um bug.

A Filosofia está longe de ser prática.

E como irá o praticante explicar um resultado tão contraditório aos teóricos:

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

Resultado: 4:0

Expectativa: 0:0

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

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

 
A100:

E como explicaria um praticante a um teórico um tal resultado?

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

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