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

 
fxsaber:

count=0の時に何を出力するかはドキュメントの問題なので、バグとは2つの関数の食い違いのことであり、結果ではありません。

いや、均一性原理というものもあるのです。

 
fxsaber:

count=0のときに何を出力 するかはドキュメント上の問題なので、バグは2つの関数のミスマッチであって、その結果ではない。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

エラー、バグ、質問

ローマン さん 2021.05.07 22:07

全てのトリックは関数の説明にあります ))

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

automatic progress ))
何がユーザーをより混乱させるか。

A100:

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

結果:4:0

期待値:0:0

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

私の説明は簡単で、これらの標準関数のいずれかにバグがあり、そのバグがどれなのかも知っています。


 
Roman:

その後、開発者はすでに修正 したので、あなたの以前の説明は無意味です。

関数は 同じ(型が違うだけ、実際はテンプレート)、説明も同じ(相互参照もある)、でも結果は違う

 
A100:

開発者が既に修正 済みなので、あなたの以前の説明は通用しません。

具体的にはどのような点が修正されたのでしょうか。
昔からドキュメントに書いてある通りです。

スト1

スト1


何が直ったか確認しましたか? ))
直りました、お望み通りに分割 しました。
3文字など。

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

しかし、countに0を 渡すと、末尾の0を含む文字列全体が自動的に コピーされます。
文字列が空の場合でも、末尾の0がコピーされます。

char ch[];
int str = StringToCharArray( "", ch, 0, 0 );
    
Print("StringToCharArray "+(string)str);
2021.05.25 02:24:47.161 Test (AUDUSD,M1)   StringToCharArray 1
また、StringLen()は終端の0を返さない ))
 
Roman:

具体的に何を直したのですか?

しかし、countに0を 渡すと、末尾の0を含む文字列全体が自動的に コピーされます。
文字列が空の場合でも、末尾の0はコピーされます。

StringToShortArrayでは なぜ違うのですか?できれば、トリックや、以前の素晴らしい説明(結局失敗 した)の不明瞭な参照なしに、-簡単な言葉で-間抜けな人のために説明してください

このトピックでは、;やその他の不適切な記号を使用しないでください。

 
A100:

StringToShortArrayでは なぜ違うのですか?できれば、小細工や、以前の見事な説明(結局失敗した)を参照することなく、簡単に、間抜けにもわかるように説明してほしい

このトピックでは、;やその他の無関係な記号を使用しないでください。

スプリットワークス

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

なぜカウント0が 機能しないのかわからない。
多分、このカウント0での スマート自動はここでは機能せず、ヘルプによると、すでにミスマッチになっているのでしょう。
そして、それはエラーでなければならない。

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

いずれにせよ、ここでカウント0では 動作しないエラーが 発生しているか
カウント0 では動作するStringToCharArrayにエラーが 発生しているか、どちらかです

説明の健全性を理解させるために、C言語の基礎、特に文字列の扱いを勉強してください。
そうすれば、質問はないでしょう。

 
Roman:

要するに、ここでカウント0が 効かないというエラーが 発生しているか、
、カウント0が効くというStringToCharArrayのエラーが 発生しているかのどちらか です。

ブリリアント!

 
A100:

ブリリアント!

もちろん、天才です。ヘルプにはカウント0の扱いは 明示的に開示されていません
しかし、頭をひねってみると、配列に0サイズを渡して、そこに0メモリを割り当てるのは、控えめに言ってもおかしい のです。
そのため、カウント0を トリガーに、文字列の最後まで自動的にリサイズされる
論理的には、StringToShortArrayでも 同様に動作するはずです。
エラーは、リサイズなしで、よりよく返されたはずです。
 
Roman:
もちろん、天才です。ヘルプにはカウント0の 扱いは 明示的に開示されていません
しかし、首をかしげると、配列サイズ0を渡して、そこにメモリ0を割り当てるのは、控えめに言っておかしいです。そのため、
カウント0をトリガーに、文字列の最後まで自動的にリサイズさ れる。論理的には、
StringToShortArrayでも 同様に動作するはずです。リサイズをせずにエラーを返してくれるのがいい。

そして、その中で

CharArrayToString

なぜ最後までやらないのか?

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

結果: ""

 
A100:

そして、その中で

なぜ最後までやらないのか?

結果: ""

CharArrayToStringに[out]動的配列がないためと思われます。
そして、開発者は「これは不要だ」と判断したのです。
同じような機能でロジックが異なると、より混乱が生じますが。