strcat有关数组设置得不够大导致的坑

2019-12-09 13:38发布

本帖最后由 costpope 于 2019-11-23 20:43 编辑

我写的一段程序数组1大约是50字节,数组2没有太在意是30字节,实际使用时就看到strcat不断在检测数组2是否到头了,(BNE 和 0x00比较)我就看见BNE比较的地址不断的在被写进新的内容,导致strcat 实际上永远读不到0x00的那个字节,然后就hard fault.

我把数组1设为150的长度,问题就解决了。
我弄不明白的是,这里面具体的细节是怎么样的,为什么会出现strcat 需要寻找‘’的地方不断被写入新的内容的现象。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
takashiki
1楼-- · 2019-12-09 15:36
STM32么?strcpy、strcat已经是公认的不安全了,然后就建议使用它们的长度替换版本:strncpy、strncat。然而这两个函数仍然不安全,再然后建议使用strlcpy、strlcat了。
其他的不安全的函数有相应的安全版本替代,但不会像strcpy/strcat那么曲折。
costpope
2楼-- · 2019-12-09 17:02
takashiki 发表于 2019-11-23 20:54
STM32么?strcpy、strcat已经是公认的不安全了,然后就建议使用它们的长度替换版本:strncpy、strncat。然 ...

那都是哪个库里面的?
vtte
3楼-- · 2019-12-09 18:18
你要弄清楚,寻找只是在寻找字符串的结尾,并不是寻找数组的末尾。
yoz
4楼-- · 2019-12-09 19:34
不贴代码看不出问题,但是我的直觉是你对strcat理解不清楚。
浮华一生
5楼-- · 2019-12-09 22:44
 精彩回答 2  元偷偷看……
takashiki
6楼-- · 2019-12-09 23:25
浮华一生 发表于 2019-11-24 15:24
这种不安全是哪种情况? 一般是多线程么?

不是。strcat/strcpy不检查缓冲区的长度,strncat/strncpy虽然检查了缓冲区长度但是不保证结尾,都是坑

一周热门 更多>