Errores, fallos, preguntas - página 3020

 
A100:

Si se inicializa, entonces por qué la ejecución

error 4009

ERR_NOTINITIALIZED_STRING

4009

Cadena no inicializada

Se trata de una cuestión de terminología.

 
mktr8591:

Ese no es el problema, es el hecho de que este código devuelve 4 y debería devolver 0.

Esto sólo significa que -1 y 0 tienen el mismo resultado. El mismo resultado dará probablemente INT_MAX y algo más.

Saber/conocer algunas de las características de las funciones regulares está bien.
 
fxsaber:


Está bien saber/conocer algunas características de las funciones regulares.

Por supuesto. Especialmente cuando la característica es un error ))

Bien y sin ambigüedades añadir a la rama"Características del lenguaje mql5..."

 
fxsaber:

Sólo significa que -1 y 0 tienen el mismo resultado.

Si crees que esto es lógico y correcto, creo que te hace preguntarte si tu lógica es 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:

Por supuesto. Especialmente cuando la característica es un error ))

Bueno y definitivamente añadir a la rama"Peculiaridades del lenguaje mql5...".

Si se modifica un poco la documentación, deja de ser un error.

Andrei Trukhanovich:

Si crees que es lógico y correcto, creo que esto es una razón para pensar en la lógica de tu lógica.

La filosofía está lejos de la práctica.

 
Roman:

+1 es innecesario porque se requiere una copia limpia (sin caracteres nulos de terminación). Si quieres demostrar que no es un bug, necesitas argumentos

 
A100:

requiere una copia limpia (sin caracteres nulos de terminación)

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

Este es un diseño con mucha barba.


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:

Si se modifica un poco la documentación, deja de ser un error.

La filosofía está lejos de la práctica.

Y cómo va a explicar el profesional un resultado tan contradictorio a los 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

¿O también corregirán la documentación un poco? Bueno, al fin y al cabo, no para arreglar los errores.

Mi explicación es sencilla: hay un error en una de estas funciones estándar, e incluso sé cuál es

 
A100:

¿Y cómo explicaría un profesional ese resultado a un teórico?

Mi explicación es sencilla: una de estas funciones tiene un error, e incluso sé cuál.

El error es una discrepancia entre estas dos funciones, no su resultado, porque es sólo una cuestión de documentación de lo que debe salir cuando count=0.