エラー、バグ、質問 - ページ 2566 1...255925602561256225632564256525662567256825692570257125722573...3185 新しいコメント 削除済み 2019.09.18 14:57 #25651 Slava: このキャスティングでは、データの損失はありません。0であるか、0でないかのどちらかです。 もう一つのケースは、double -> 任意の整数型(int32 まで)である場合です。 警告に翻弄されすぎて、判断に一貫性がない。 bool continuation()const {return this.last_level;} // uint last_level // expression not boolean lrp_last_9.mq5 260 42 A100 2019.09.18 17:18 #25652 Vict: 警告を出すにしても、ちょっとやりすぎだと思う。判断に一貫 性がない。 同意 ここでも、この意味でのデータロスはありません(0か0でないか です) void OnStart() { int i = -1; while ( ++i ); //Warning: expression not boolean } が、注意事項があります。統一されたアプローチが期待された Aliaksandr Hryshyn 2019.09.18 17:20 #25653 同じクラスの静的関数から、クラスインスタンスのプロパティにアクセスしようとした結果。 2019.09.18 20:07:41.043 Test_exec (EURUSD,M5) Access violation at 0x000001E9CCD2963C read to 0x0000000000000014 in 'D:\Alpari MT5\MQL5\Scripts\Test_exec.ex5' 2019.09.18 20:07:41.080 Test_exec (EURUSD,M5) crash --> 000001E9CCD2963C 837B1400 cmp dword [rbx+0x14], 0x0 2019.09.18 20:07:41.080 Test_exec (EURUSD,M5) 000001E9CCD29640 0F8E8F020000 jle dword 0x1e9ccd298d5 2019.09.18 20:07:41.080 Test_exec (EURUSD,M5) 2019.09.18 20:07:41.080 Test_exec (EURUSD,M5) 000001E9CCD29646 90 nop 2019.09.18 20:07:41.080 Test_exec (EURUSD,M5) 2019.09.18 20:07:41.080 Test_exec (EURUSD,M5) 00: 0x000001E9CCD2963C 2019.09.18 20:07:41.080 Test_exec (EURUSD,M5) 01: 0x000000B56CA2F120 2019.09.18 20:07:41.080 Test_exec (EURUSD,M5) 02: 0x000001E9CCD2A04D この前、コンパイラは黙っていた。 Roman 2019.09.18 19:22 #25654 空文字列を端末のNULLで初期化しない。 void OnStart() { string str; StringInit(str, 100, 0); Print(StringLen(str)); } 結果 2019.09.18 22:16:54.380 TestScript (EURUSD,H1) 0 期待値 2019.09.18 22:16:54.380 TestScript (EURUSD,H1) 100 StringInit関数の ヘルプに記載されている注意事項 Примечание Если character=0 и размер new_len>0, то будет распределен буфер строки указанного размера и заполнен нулями. Размер строки будет равен нулю, так как весь буфер заполнен терминаторами строки. 実は、流通はしていないのです。 すなわち、このような配分で、10スペース string str = " "; は同じではありません。 string str; StringInit(str, 10, 0); 赤色で表示されているヘルプテキストは、論理的な動作に対応していません。 Igor Makanu 2019.09.18 19:23 #25655 Vict: 警告はやりすぎだと思う。判断の一貫性が足りない。 警告はブーリアン演算には効かない、今、偶然にも自分のコードのタイプミスに気づいたので、再現してみました。 #define getAsk(dummy) SymbolInfoDouble(_Symbol, SYMBOL_ASK) #define getBid(dummy) SymbolInfoDouble(_Symbol, SYMBOL_BID) //+------------------------------------------------------------------+ void OnStart() { double sl = 0.0,tp=0.0; if(sl != ! OrderStopLoss() || tp != OrderTakeProfit()) Print(""); } //+------------------------------------------------------------------+ double OrderStopLoss() { return(getAsk()); } double OrderTakeProfit() { return(getBid()); } Stanislav Korotky 2019.09.18 21:04 #25656 Roman: 空文字列を端末のNULLで初期化しない。 結果 期待値 StringInit関数の ヘルプに記載されている注意事項 実際、分配はありません。 すなわち、このような配分で、10スペース は同じではありません。 そして、ヘルプテキストで赤くハイライトされている動作のロジックと一致しないようです。 StringBufferLen関数は、割り当てられたバッファのサイズを返します。StringLenは、文字列の長さ、つまり、終端文字までの長さを返します。 Buffer != string. A100 2019.09.18 22:05 #25657 Stanislav Korotky: StringBufferLen関数は、割り当てられたバッファのサイズを返します。StringLenは文字列の長さ、つまり終端文字までの長さを返し、終端文字が先頭にある場合はそれぞれ長さ0となる。 Buffer != string. そうでなければ、自分自身を知ることができない。 Roman 2019.09.18 22:59 #25658 Stanislav Korotky: StringBufferLen関数は、割り当てられたバッファのサイズを返します。 StringLenは文字列の長さ、つまり終端文字までの長さを返し、終端文字が先頭にある場合はそれぞれ長さ0となる。 Buffer != string. これは明らかで、文字列を 末尾のゼロで初期化 することを言っているのです。 stringInit(str, 10, 0); を末尾のゼロ10個で埋めてはどうでしょう?そして、実際の文字列の長さを返す。 もし、空の文字列を埋めずに初期化したい場合!例えば100文字で。 とすると、str = " キーボードを何度も叩く " として空白を100個にするか、ゴミのような初期化 StringInit(str, 100, 65) を実行します。 なぜゴミで初期化する必要があるのか理解できない、すでに十分な量があるのだから )) 削除済み 2019.09.19 00:30 #25659 Roman: それは理解できる、文字列を 末尾のゼロで初期化 するという話だ。 StringInit(str, 10, 0); を末尾のゼロ10個で埋めてはどうでしょう?そして、実際の文字列の長さを返す。 もし、空の文字列を埋めずに初期化したい場合!例えば100文字で。 とすると、str = " キーボードを何度も叩く " として空白を100個にするか、ゴミのような初期化 StringInit(str, 100, 65) を実行します。 なぜゴミで初期化する必要があるのか理解できない、すでに十分な量があるのだから )) なぜ、記入されていないと思うのですか?ただ、μlの文字列の長さは記憶されず、端末のゼロで認識されます。 StringInit(str, 100, ' '); ん? また、ゼロが必要な場合は、µl stdの奥底のどこかにStringクラスがあります。 Roman 2019.09.19 01:10 #25660 Vict: なぜ、記入されていないと思うのですか?ただ、μlの文字列の長さは記憶されず、端末のゼロで認識されます。 ん? また、ゼロが必要な場合は、µl std の奥底に String クラスが存在します。 いや・・・その方法でもゼロを返します。また、3番目のパラメータushortは、整数の文字コードを必要とします。 str = " ";として初期化し、DLLからデータを渡すと、すべてOKです。 しかし、StringInit(str, 10, 0)として初期化すると、データが届かなくなる。これは、必要な大きさの文字列のためのメモリが確保 されていないためです。 もし私がスペースのためのコードを持っていたら、おそらく働いていただろうが、私は別のテーブルでそのようなコードを発見していないこと。 すでに初期化されている空文字列に移動する未来の文字数分のメモリーを確保する必要があります。 しかし、文字列を初期化するための屑、コンメルフォではない。 StringInit(str, 100, 0); は、末尾にヌルが入り、長さ100を返すはずです。 1...255925602561256225632564256525662567256825692570257125722573...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
このキャスティングでは、データの損失はありません。0であるか、0でないかのどちらかです。
もう一つのケースは、double -> 任意の整数型(int32 まで)である場合です。
警告に翻弄されすぎて、判断に一貫性がない。
警告を出すにしても、ちょっとやりすぎだと思う。判断に一貫 性がない。
同意
ここでも、この意味でのデータロスはありません(0か0でないか です)
が、注意事項があります。統一されたアプローチが期待された
同じクラスの静的関数から、クラスインスタンスのプロパティにアクセスしようとした結果。
この前、コンパイラは黙っていた。空文字列を端末のNULLで初期化しない。
結果
期待値
StringInit関数の ヘルプに記載されている注意事項
実は、流通はしていないのです。
すなわち、このような配分で、10スペース
は同じではありません。
赤色で表示されているヘルプテキストは、論理的な動作に対応していません。
警告はやりすぎだと思う。判断の一貫性が足りない。
警告はブーリアン演算には効かない、今、偶然にも自分のコードのタイプミスに気づいたので、再現してみました。
空文字列を端末のNULLで初期化しない。
結果
期待値
StringInit関数の ヘルプに記載されている注意事項
実際、分配はありません。
すなわち、このような配分で、10スペース
は同じではありません。
そして、ヘルプテキストで赤くハイライトされている動作のロジックと一致しないようです。
StringBufferLen関数は、割り当てられたバッファのサイズを返します。StringLenは、文字列の長さ、つまり、終端文字までの長さを返します。 Buffer != string.
StringBufferLen関数は、割り当てられたバッファのサイズを返します。StringLenは文字列の長さ、つまり終端文字までの長さを返し、終端文字が先頭にある場合はそれぞれ長さ0となる。 Buffer != string.
そうでなければ、自分自身を知ることができない。
StringBufferLen関数は、割り当てられたバッファのサイズを返します。
StringLenは文字列の長さ、つまり終端文字までの長さを返し、終端文字が先頭にある場合はそれぞれ長さ0となる。 Buffer != string.
これは明らかで、文字列を 末尾のゼロで初期化 することを言っているのです。
stringInit(str, 10, 0); を末尾のゼロ10個で埋めてはどうでしょう?そして、実際の文字列の長さを返す。
もし、空の文字列を埋めずに初期化したい場合!例えば100文字で。
とすると、str = " キーボードを何度も叩く " として空白を100個にするか、ゴミのような初期化 StringInit(str, 100, 65) を実行します。
なぜゴミで初期化する必要があるのか理解できない、すでに十分な量があるのだから ))
それは理解できる、文字列を 末尾のゼロで初期化 するという話だ。
StringInit(str, 10, 0); を末尾のゼロ10個で埋めてはどうでしょう?そして、実際の文字列の長さを返す。
もし、空の文字列を埋めずに初期化したい場合!例えば100文字で。
とすると、str = " キーボードを何度も叩く " として空白を100個にするか、ゴミのような初期化 StringInit(str, 100, 65) を実行します。
なぜゴミで初期化する必要があるのか理解できない、すでに十分な量があるのだから ))
なぜ、記入されていないと思うのですか?ただ、μlの文字列の長さは記憶されず、端末のゼロで認識されます。
ん?
また、ゼロが必要な場合は、µl stdの奥底のどこかにStringクラスがあります。
なぜ、記入されていないと思うのですか?ただ、μlの文字列の長さは記憶されず、端末のゼロで認識されます。
ん?
また、ゼロが必要な場合は、µl std の奥底に String クラスが存在します。
いや・・・その方法でもゼロを返します。また、3番目のパラメータushortは、整数の文字コードを必要とします。
str = " ";として初期化し、DLLからデータを渡すと、すべてOKです。
しかし、StringInit(str, 10, 0)として初期化すると、データが届かなくなる。これは、必要な大きさの文字列のためのメモリが確保 されていないためです。
もし私がスペースのためのコードを持っていたら、おそらく働いていただろうが、私は別のテーブルでそのようなコードを発見していないこと。
すでに初期化されている空文字列に移動する未来の文字数分のメモリーを確保する必要があります。
しかし、文字列を初期化するための屑、コンメルフォではない。
StringInit(str, 100, 0); は、末尾にヌルが入り、長さ100を返すはずです。