Erreurs, bugs, questions - page 3020

 
mktr8591:

Ce n'est pas le problème, c'est le fait que ce code renvoie 4 et devrait renvoyer 0.

Cela signifie simplement que -1 et 0 ont le même résultat. Le même résultat donnera probablement INT_MAX et autre chose.

Connaître certaines des caractéristiques des fonctions régulières, c'est bien.
 
fxsaber:


Il est normal de connaître certaines caractéristiques des fonctions régulières.

Bien sûr. Surtout quand la fonctionnalité est un bug ;)

Bien et sans équivoque ajouter à la branche"Caractéristiques du langage mql5..."

 
fxsaber:

Cela signifie simplement que -1 et 0 ont le même résultat.

Si vous pensez que c'est logique et correct, je pense que vous devez vous demander si votre logique est logique...

 
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:

Bien sûr. Surtout quand la fonctionnalité est un bug ;)

Bien et définitivement ajouter à la branche"Peculiarities of mql5language...".

Modifiez un peu la documentation et ce n'est plus un bogue.

Andrei Trukhanovich:

Si vous pensez que c'est logique et correct, je pense que c'est une raison pour réfléchir à la logique de votre logique.

La philosophie est loin de la pratique.

 
Roman:

+1 n'est pas nécessaire car une copie propre (sans caractères nuls de fin) est requise. Si vous voulez prouver que ce n'est pas un bug, vous avez besoin d'arguments

 
A100:

nécessite une copie propre (pas de caractères nuls de fin)

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

C'est un modèle très barbu.


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:

Modifiez un peu la documentation et ce n'est plus un bogue.

La philosophie est loin de la pratique.

Et comment le praticien expliquera-t-il un résultat aussi contradictoire aux théoriciens :

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

Résultat : 4:0

Attente : 0:0

Ou bien vont-ils aussi corriger un peu la documentation ? Pas pour corriger les bugs après tout !

Mon explication est simple : il y a un bug dans l'une de ces fonctions standard - et je sais même laquelle

 
A100:

Et comment un praticien expliquerait-il un tel résultat à un théoricien ?

Mon explication est simple : l'une de ces fonctions a un bug - et je sais même laquelle.

Le bogue est une divergence entre ces deux fonctions, et non leur résultat, car il s'agit juste d'une question de documentation sur ce qu'il faut sortir lorsque count=0.

 
fxsaber:

Le bogue est l'écart entre les deux fonctions, pas le résultat, car il s'agit simplement de documenter ce qu'il faut sortir lorsque le nombre est égal à 0.

Non, il existe aussi un principe d'uniformité. le bug est évident. si vous ne comprenez pas pourquoi c'est un bug, c'est votre problème.