エラー、バグ、質問 - ページ 3020

 
A100:

初期化されるのであれば、なぜ実行が

エラー4009

err_notinitialized_string

4009

未初期化文字列

これは用語の問題です。

 
mktr8591:

問題はそこではなく、このコードが4を返し、0を返すべきであるということです。

これは、-1と0が同じ結果になることを意味しているに過ぎない。同じ結果でも、おそらくINT_MAXと 何か別のものが出てくるでしょう。

通常の機能の一部を知っている/知っているだけで結構です。
 
fxsaber:


常用漢字の機能を知っている/知っている程度でOKです。

もちろんです。特に、その機能がバグである場合 ))

"mql5言語の特徴"というブランチに、うまく、そして明確に追加してください。

 
fxsaber:

ただ、-1と0は同じ結果になるということです。

これが論理的で正しいと思うのであれば、自分の論理が論理的かどうか疑わしくなると思います

 
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:

もちろんです。特に、その機能がバグである場合 ))

さて、そして是非とも「mql5言語の特殊性...」というブランチに追加してください。

ドキュメントを少しいじれば、もはやバグではありません。

Andrei Trukhanovich:

論理的に正しいと思うのであれば、その論理を考えるきっかけになると思います。

哲学は実践から遠い。

 
Roman:

クリーンコピー(終端ヌル文字なし)が必要なため、+1 は必要ありません。バグでないことを証明したい場合は、引数が必要です

 
A100:

は、クリーンコピーである必要があります(終端NULL文字がない)。

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

ヒゲの多いデザインです。


世界記録

#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:

ドキュメントを少しいじれば、もはやバグではありません。

哲学は実践から遠い。

そして、このような矛盾した結果を、実践者は理論家にどう説明するのだろうか。

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

結果:4:0

期待度:0:0

それとも、ドキュメントも少しは修正するのでしょうか?まあ、結局のところバグを修正するためではないんですけどね

私の説明は簡単で、これらの標準的な関数のいずれかにバグがあり、どの関数かさえ分かっているのです。

 
A100:

そして、そのような結果を、実務家が理論家にどのように説明するのでしょうか。

この関数のどれかにバグがあり、そのバグがどれなのかもわかっているのです。

count=0の時に何を出力するかはドキュメントの問題なので、バグはこの2つの関数の齟齬であって、その結果ではない。