错误、漏洞、问题 - 页 2461 1...245424552456245724582459246024612462246324642465246624672468...3184 新评论 Sergey Dzyublik 2019.05.15 13:05 #24601 fxsaber:你能详细说明一下这一点吗?以下是我的主观意见,如果我哪里错了,我很愿意帮助。 StringLen过去一直工作在O(n),直到字符串中的第一个NULL字符(0x0000),现在它工作在O(1)。字符串的长度 总是可以通过StringSetCharacter(str, pos, 0x00)来截断,但他们由于某种原因引入了StringSetLength。 最有可能的是,分析器在处理字符串时解决了代码加速的任务。 加快代码速度的任务已经解决了,没有人在意现在一半的函数处理字符串中的NULL字符,而另一半不处理。 #define PRINT(x) Print(#x, ":", string(x)) void OnStart(){ string str = "123456789"; PRINT(str); PRINT(StringLen(str)); PRINT(StringSetCharacter(str, 7, 0x00)); PRINT(StringLen(str)); str += "\x00" + str; PRINT(StringLen(str)); str += str; PRINT(str); PRINT(StringLen(str)); ushort array[]; PRINT(StringToShortArray(str, array)); ArrayPrint(array); PRINT(StringLen(str)); PRINT(StringLen(ShortArrayToString(array))); PRINT(StringLen(ShortArrayToString(array, 0, StringLen(str)))); } 其结果是。 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) str:123456789 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(str):9 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringSetCharacter(str,7,0x00):true 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(str):7 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(str):15 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) str:1234567 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(str):30 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringToShortArray(str,array):31 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) 49 50 51 52 53 54 55 0 49 50 51 52 53 54 55 49 50 51 52 53 54 55 0 49 50 51 52 53 54 55 0 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(str):30 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(ShortArrayToString(array)):7 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(ShortArrayToString(array,0,StringLen(str))):7 Artyom Trishkin 2019.05.15 13:16 #24602 Sergey Dzyublik:以下是我的主观意见,如果我哪里错了,我很愿意帮助。 StringLen过去一直工作在O(n),直到字符串中的第一个NULL字符(0x0000),但现在它工作在O(1)。字符串的长度 总是可以通过StringSetCharacter(str, pos, 0x00)来截断,但他们由于某种原因引入了StringSetLength。 最有可能的是,在处理字符串时,代码加速的任务得到了解决。 加快代码速度的任务已经解决了,没有人在意现在一半的函数处理字符串中的NULL字符,而另一半不处理。 其结果是。 请克制你的情绪。下次你再使用粗话,就要被禁言了--我们这里不是酒吧。而且在酒吧里说脏话已经不再是一种时尚。 A100 2019.05.15 13:45 #24603 Sergey Dzyublik:StringLen曾经工作在O(n),直到字符串中的第一个NULL字符(0x0000),现在它工作在O(1)。 只是部分修复了bug...为什么不呢?在我的记忆中,StringLen总是正确地工作(至少在x32中)。 A100 2019.05.15 13:53 #24604 Sergey Dzyublik: 对开发商而言。 请增加为默认赋值运算符(复制构造器)指定强制代码生成的功能。这有点复杂。使用默认构造函数类比更容易。 1) 任何赋值运算符 都会覆盖默认的赋值运算符 2) 任何复制操作者都会覆盖默认的复制操作者。 Sergey Dzyublik 2019.05.15 14:02 #24605 A100: 只是部分地纠正了错误......为什么不呢?因为MQL在处理带有NULL字符的字符串时没有一致的想法,这就是问题所在。 例如,StringToShortArray支持字符串中的NULL字符,而反向函数ShortArrayToString则不支持。 因此,更多的时间被花在捕捉错误和寻找解决方法上,而不是用于解决特定任务。 Sergey Dzyublik 2019.05.15 14:05 #24606 A100:这有点复杂。使用默认构造函数类比更容易。 1) 任何赋值运算符 都会覆盖默认的赋值运算符 2) 任何复制操作都会取消默认的复制操作我不需要撤消,我需要的是相反的强制生成。 MQL没有复杂类型深度复制的功能,在赋值运算符和复制构造器中,它们被默认实现。 A100 2019.05.15 14:08 #24607 Sergey Dzyublik:由于在MQL中处理带有NULL字符的字符串时没有一致的想法,这就是问题所在。 例如,StringToShortArray支持字符串中的NULL字符,而它的反向函数ShortArrayToString则不支持。一方面是的,另一方面在文件 中明确指出:"或直到满足终端0"。 TheXpert 2019.05.15 14:09 #24608 Sergey Dzyublik: 好吧,有点不清楚为什么一开始就拖动了来自正数的零线。 Sergey Dzyublik 2019.05.15 14:13 #24609 A100:一方面是的,另一方面在文件 中明确指出(它没有)。和StringToShortArray 说的一样。 Количество элементов массива для копирования. Определяет длину результатной строки. По умолчанию -1, что означает копирование до конца массива, либо до встречи терминального 0.然而,这并不妨碍它充分处理字符串中的NULL字符。 astronom55 2019.05.15 14:17 #24610 你好。MT5移动版 无法连接到我的Alpari经纪商。问题是什么?这是否会在某个时候被修复? 1...245424552456245724582459246024612462246324642465246624672468...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你能详细说明一下这一点吗?
以下是我的主观意见,如果我哪里错了,我很愿意帮助。
StringLen过去一直工作在O(n),直到字符串中的第一个NULL字符(0x0000),现在它工作在O(1)。
字符串的长度 总是可以通过StringSetCharacter(str, pos, 0x00)来截断,但他们由于某种原因引入了StringSetLength。
最有可能的是,分析器在处理字符串时解决了代码加速的任务。
加快代码速度的任务已经解决了,没有人在意现在一半的函数处理字符串中的NULL字符,而另一半不处理。
其结果是。
以下是我的主观意见,如果我哪里错了,我很愿意帮助。
StringLen过去一直工作在O(n),直到字符串中的第一个NULL字符(0x0000),但现在它工作在O(1)。
字符串的长度 总是可以通过StringSetCharacter(str, pos, 0x00)来截断,但他们由于某种原因引入了StringSetLength。
最有可能的是,在处理字符串时,代码加速的任务得到了解决。
加快代码速度的任务已经解决了,没有人在意现在一半的函数处理字符串中的NULL字符,而另一半不处理。
其结果是。
StringLen曾经工作在O(n),直到字符串中的第一个NULL字符(0x0000),现在它工作在O(1)。
对开发商而言。
请增加为默认赋值运算符(复制构造器)指定强制代码生成的功能。
这有点复杂。使用默认构造函数类比更容易。
1) 任何赋值运算符 都会覆盖默认的赋值运算符
2) 任何复制操作者都会覆盖默认的复制操作者。
只是部分地纠正了错误......为什么不呢?
因为MQL在处理带有NULL字符的字符串时没有一致的想法,这就是问题所在。
例如,StringToShortArray支持字符串中的NULL字符,而反向函数ShortArrayToString则不支持。
因此,更多的时间被花在捕捉错误和寻找解决方法上,而不是用于解决特定任务。
这有点复杂。使用默认构造函数类比更容易。
1) 任何赋值运算符 都会覆盖默认的赋值运算符
2) 任何复制操作都会取消默认的复制操作
我不需要撤消,我需要的是相反的强制生成。
MQL没有复杂类型深度复制的功能,在赋值运算符和复制构造器中,它们被默认实现。
由于在MQL中处理带有NULL字符的字符串时没有一致的想法,这就是问题所在。
例如,StringToShortArray支持字符串中的NULL字符,而它的反向函数ShortArrayToString则不支持。
一方面是的,另一方面在文件 中明确指出:"或直到满足终端0"。
一方面是的,另一方面在文件 中明确指出(它没有)。
和StringToShortArray 说的一样。
然而,这并不妨碍它充分处理字符串中的NULL字符。