精易论坛

标题: 警告,不要用系统自带的寻找文本(strstr)来用.存在BUG!! [打印本页]

作者: 呵呵仙    时间: 2023-10-16 00:01
标题: 警告,不要用系统自带的寻找文本(strstr)来用.存在BUG!!

拿"的"字的第2字节,作"母"的第1字节来用!?
目测,微软就是简单粗暴的1字节1字节对比.然后达到字符数了.就返回!
应该是要先判断当前这个字是双字节,还是单字节.才开始对比才合理的!
快速文本对象也存在这个问题!造成"对象.替换子文本()","对象.替换文本()","对象.寻找文本()"也出现这个错误,要么就是调用了这API.
要么就是作者算法思路错误!


  
窗口程序集名保 留  保 留备 注
窗口程序集1   
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
A文本型 
B文本型 
A指针整数型 
B指针整数型 
所在位置整数型 
A = “我的盖子”
B = “母亲”
A指针 = 取变量数据地址 (A)
B指针 = 取变量数据地址 (B)
所在位置 = strstr (A指针, B指针) - A指针 + 1
调试输出 (“母亲所在位置:”, 所在位置, 到字节集 (A), 到字节集 (B))
' ===================================
A = “我的盖子”
B = “盖子”
A指针 = 取变量数据地址 (A)
B指针 = 取变量数据地址 (B)
所在位置 = strstr (A指针, B指针) - A指针 + 1
调试输出 (“盖子所在位置:”, 所在位置)
DLL命令名返回值类型公开备 注
strstr整数型 
DLL库文件名:
msvcrt.dll
在DLL库中对应命令名:
@strstr
参数名类 型传址数组备 注
被搜寻的文本指针整数型
要搜寻的文本指针整数型



i支持库列表   支持库注释   
spec特殊功能支持库



作者: 帅气与大侠    时间: 2023-10-16 00:12
  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
a文本型 
b文本型 
a = “我的盖子”
b = “母亲”
调试输出 (到字节集 (a), 到字节集 (b))
调试输出 (寻找文本 (a, b, , ))
' 开始运行被调试程序
' * 字节集:8{206,210,181,196,184,199,215,211} | 字节集:4{196,184,199,215}
' * -1
' 被调试易程序运行完毕
' 为什么我的寻找文本提示返回-1啊,难道核心库的版本不一样吗?
返回 (0)  ' 可以根据您的需要返回任意数值



i支持库列表   支持库注释   
spec特殊功能支持库


作者: 道易有道    时间: 2023-10-16 00:13
没看懂,字符串没有母亲这个,是怎么搜索到并且给出位置的?
作者: 呵呵仙    时间: 2023-10-16 00:16
帅气与大侠 发表于 2023-10-16 00:12
[e=1].版本 2
.支持库 spec

注意看标题,是strstr函数
作者: 帅气与大侠    时间: 2023-10-16 00:17

难道我的核心库版本和大家的不一样吗?还是电脑环境不一样?
为什么我这边寻找文本返回-1呢

作者: 帅气与大侠    时间: 2023-10-16 00:18
道易有道 发表于 2023-10-16 00:13
没看懂,字符串没有母亲这个,是怎么搜索到并且给出位置的?

之前论坛有易友发了个帖子,说的是“我的盖子”和“母亲”的字节集存在相同部分,导致寻找文本出现bug错误
作者: 呵呵仙    时间: 2023-10-16 00:19
道易有道 发表于 2023-10-16 00:13
没看懂,字符串没有母亲这个,是怎么搜索到并且给出位置的?

所以说系统API相关寻找文本不要用!
https://baike.baidu.com/item/strstr/811469?fr=ge_ala
作者: 呵呵仙    时间: 2023-10-16 00:29
帅气与大侠 发表于 2023-10-16 00:17
难道我的核心库版本和大家的不一样吗?还是电脑环境不一样?
为什么我这边寻找文本返回-1呢
...

不是易语言自带的寻找文本()啊!这个没问题.我只是提醒有用API函数代替易的寻找文本的朋友,注意,不要用API写!
作者: 一尘不染    时间: 2023-10-16 00:45
大佬,好久不见你更新你的模块了
作者: 算法艺术家    时间: 2023-10-16 01:11
大佬你终于出现了,没事发点好东西给大伙玩玩呗
作者: tian89    时间: 2023-10-16 02:53
开发系统函数一开始都是单字符英文的后来演变成宽字符才出现UBG的
作者: 查过    时间: 2023-10-16 07:27
感谢发布原创作品,精易因你更精彩!6666666666666
作者: 豆豆灰常开心    时间: 2023-10-16 07:32
感谢楼主分享!
作者: tian89    时间: 2023-10-16 07:47
我回复你信息后,又想起来以前我用过的函数没有出现你说的那问题
作者: 一指温柔    时间: 2023-10-16 08:44
膜拜大佬
作者: fxchenglong1    时间: 2023-10-16 09:06

作者: 嫂子    时间: 2023-10-16 09:43
相同代码没有出现  楼主所说情况
作者: mytiger    时间: 2023-10-16 10:11
本帖最后由 mytiger 于 2023-10-16 10:19 编辑

快速文本对象测试有此bug,精易模块的快速文本也有此bug.
作者: 梦想ol    时间: 2023-10-16 10:23
呵呵仙 发表于 2023-10-16 00:19
所以说系统API相关寻找文本不要用!
https://baike.baidu.com/item/strstr/811469?fr=ge_ala ...

ntdll那个也有同样的问题,shell32测试可以

* “母亲返回指针:” | 0
* “母亲所在位置:” | -2228491 | 字节集:8{206,210,181,196,184,199,215,211} | 字节集:4{196,184,199,215}
* “盖子所在位置:” | 5

.版本 2

.DLL命令 strstr, 整数型, "shell32.dll", "StrStrA"
    .参数 被搜寻的文本指针, 整数型
    .参数 要搜寻的文本指针, 整数型

作者: fengyishen    时间: 2023-10-16 10:42
我觉得不能算BUG,只能说过于底层。传递的编码本来就该程序员控制。你被易语言影响思维了
作者: 给自己留一片天空    时间: 2023-10-16 11:13
新技能已get√
作者: qck易语言    时间: 2023-10-16 12:02
自带的寻找文本是instr吧?调试输出 (寻找文本 (“我的盖子”, “母亲”, , 假)),并没有把  勺盖了  当成  母亲 啊
作者: yokie    时间: 2023-10-16 14:07
qck易语言 发表于 2023-10-16 12:02
自带的寻找文本是instr吧?调试输出 (寻找文本 (“我的盖子”, “母亲”, , 假)),并没有把  勺盖了  当成  ...

他说的系统的API,不是易语言的寻找文本
作者: yokie    时间: 2023-10-16 14:12
时有这个问题
.版本 2
.支持库 spec

.子程序 _按钮1_被单击
.局部变量 A, 文本型
.局部变量 B, 文本型
.局部变量 A指针, 整数型
.局部变量 B指针, 整数型
.局部变量 所在位置, 整数型

A = “我的盖子”
B = “母亲”
A指针 = 取变量数据地址 (A)
B指针 = 取变量数据地址 (B)
所在位置 = strstr (A指针, B指针) - A指针 + 1
调试输出 (“母亲所在位置:”, 所在位置, 到字节集 (A), 到字节集 (B))
' ===================================
A = “我的盖子”
B = “盖子”
A指针 = 取变量数据地址 (A)
B指针 = 取变量数据地址 (B)
所在位置 = strstr (A指针, B指针) - A指针 + 1
调试输出 (“盖子所在位置:”, 所在位置)
调试输出 (“盖子所在位置:”, 寻找文本 (A, B, , 假))
调试输出 (“母亲所在位置:”, 寻找文本 (A, “母亲”, , 假))




[14:10:47] * “母亲所在位置:” | 4 | 字节集:8{206,210,181,196,184,199,215,211} | 字节集:4{196,184,199,215}
[14:10:47] * “盖子所在位置:” | 5
[14:10:47] * “盖子所在位置:” | 5
[14:10:47] * “母亲所在位置:” | -1
作者: 已注销571294    时间: 2023-10-16 14:28
提示: 作者被禁止或删除 内容自动屏蔽
作者: qck易语言    时间: 2023-10-16 16:30
yokie 发表于 2023-10-16 14:07
他说的系统的API,不是易语言的寻找文本

哦 Windows系统啊
作者: j1angtaojy    时间: 2023-10-16 18:34
https://125.confly.eu.org/search.php?mo ... k%E5%9B%9E%E8%B0%83
作者: pipicool    时间: 2023-10-16 19:00
学习一下
作者: 杨明煜    时间: 2023-10-16 20:00
学习学习...........
作者: ttggnn    时间: 2023-10-16 22:09
        支持开源~!感谢分享
作者: 查过    时间: 2023-10-17 07:37
下个学习一下
作者: 豆豆灰常开心    时间: 2023-10-17 07:42
感谢发布原创作品,精易因你更精彩!6666666666666
作者: 一指温柔    时间: 2023-10-17 09:49
感谢分享
作者: 大胜科技    时间: 2023-10-17 10:51
不错啊 算是有问题
作者: bianyuan456    时间: 2023-10-17 12:47
吓我一跳,还好不是易语言核心支持库的寻找文本
作者: wmv520    时间: 2023-10-17 12:55
学习学习...........
作者: 是可可吖    时间: 2023-10-17 16:39
感谢分享
作者: 查过    时间: 2023-10-18 07:49
下个学习一下
作者: 豆豆灰常开心    时间: 2023-10-18 07:54
全都是大佬~
作者: 李泽勇2    时间: 2023-10-18 08:30
请问还有没有代替命令?
作者: 一指温柔    时间: 2023-10-18 08:38
感谢分享,很给力!~
作者: ljx111    时间: 2023-10-18 09:09
感谢分享
作者: 查过    时间: 2023-10-19 07:59
感谢分享,很给力!~
作者: 豆豆灰常开心    时间: 2023-10-19 08:04
全都是大佬~
作者: hj97641    时间: 2023-10-19 08:23
感谢分享,很给力!~
作者: 396384183    时间: 2023-10-19 11:26

感谢您对论坛的支持
作者: 神女软件定制    时间: 2023-10-19 20:03
确实还没注意到过这个问题
作者: Yonder    时间: 2023-10-20 01:28
吓我一跳,我以为是易语言核心支持库的寻找文本
作者: 冰炎by    时间: 2023-10-20 16:15
感谢分享
作者: 冰棍好烫啊    时间: 2023-10-20 20:37
文本_寻找文本()
作者: chenyucheng    时间: 2023-10-21 16:17
  
窗口程序集名保 留  保 留备 注
窗口程序集1   
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
A文本型 
B文本型 
A指针整数型 
B指针整数型 
所在位置整数型 
' ===================================
输出调试文本 (“下面是使用微软VC API的'寻找文本'(strstr):”)
' ===================================
A = “我的盖子”
B = “母亲”
A指针 = 取变量数据地址 (A)
B指针 = 取变量数据地址 (B)
所在位置 = 寻找文本B (A指针, B指针) - A指针 + 1
调试输出 (“母亲所在位置:”, 所在位置, 到字节集 (A), 到字节集 (B))
' ===================================
A = “我的盖子”
B = “盖子”
A指针 = 取变量数据地址 (A)
B指针 = 取变量数据地址 (B)
所在位置 = 寻找文本B (A指针, B指针) - A指针 + 1
调试输出 (“盖子所在位置:”, 所在位置)
' ===================================
输出调试文本 (“下面是使用系统核心支持库的'寻找文本':”)
' ===================================
A = “我的盖子”
B = “母亲”
所在位置 = 寻找文本 (A, B, , )
调试输出 (“母亲所在位置:”, 所在位置, 到字节集 (A), 到字节集 (B))
' ===================================
A = “我的盖子”
B = “盖子”
所在位置 = 寻找文本 (A, B, , )
调试输出 (“盖子所在位置:”, 所在位置)
DLL命令名返回值类型公开备 注
寻找文本B整数型 
DLL库文件名:
msvcrt.dll
在DLL库中对应命令名:
@strstr
参数名类 型传址数组备 注
被搜寻的文本指针整数型
要搜寻的文本指针整数型



i支持库列表   支持库注释   
spec特殊功能支持库

作者: taohongsen1990    时间: 2023-10-22 11:56
C++   string 类型中的 find挺好用的,可以试试那个
作者: 水草兄弟    时间: 2023-10-28 10:26
嘴下留情勿喷
作者: accet    时间: 2023-10-30 00:41
帅气与大侠 发表于 2023-10-16 00:17
难道我的核心库版本和大家的不一样吗?还是电脑环境不一样?
为什么我这边寻找文本返回-1呢
...

因为你用是易语言的寻找文本.
而不是API..  人家说的BUG 是调用API出现的.

要知道易语言虽慢 但是为了中文的稳定性帮你减少了多少BUG 这些当然要花掉时间代价的.
那些一天天 就是要快要快。。 就会那样去用API 或是 汇编的 可能自己就样的坑了..
作者: yanga9    时间: 2025-2-3 09:23
吓得我赶快测试了一遍我的文本替换。。




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4