q5462310 发表于 2020-3-19 19:38:50

练习23疑惑!求解

想问一下为什么这样写就会越界 越的是指针变量里4个字符数的界吗?
这里又是怎么解决越界问题的 有点看不懂啊 求大佬

4goodworld 发表于 2020-3-19 19:38:51

本帖最后由 4goodworld 于 2020-3-19 22:34 编辑

https://xxx.ilovefishc.com/forum/202003/19/193723myapdu7dl3cb7yda.png.thumb.jpg
你看下这个判断条件
如果(*p)=='\0' break
它的意图是如果你是一个字符串的结尾,我就跳出了
看似没问题,但最大的问题是j和i的范围定义在<5,这啥意思,也就是j和i最大的可能取值是j=4,i=4
那么问题来了
(*p)假设刚好是j和i取值最大的时候,也就是(*p),从面上逻辑看,没问题,没有越界
但结合实际来看
如果是 (*p) 是不是意味指 指向的是 “wow” 这个值
很明显,“wow”只有三个字符,
但你却(*p) ?你觉得你取出来的啥?

关于解决方法的图片,
其实这个strlen 就是 让(*p) 这个指向的字符串进行比较下长度,当出现明明就3个字符的,我肯定不会让for循环出现 (*p) 的问题

wp231957 发表于 2020-3-19 20:21:01

该发图片的发图片
该发文本的发文本

徘徊浅行 发表于 2020-3-19 20:45:29

运行都没问题啊?也没越界啊?{:5_99:}

q5462310 发表于 2020-3-19 22:03:22

徘徊浅行 发表于 2020-3-19 20:45
运行都没问题啊?也没越界啊?

第一个越界啊

q5462310 发表于 2020-3-19 22:04:06

wp231957 发表于 2020-3-19 20:21
该发图片的发图片
该发文本的发文本

是图片和文本呀

q5462310 发表于 2020-3-19 22:05:07

徘徊浅行 发表于 2020-3-19 20:45
运行都没问题啊?也没越界啊?

你的I和J应该打反了

徘徊浅行 发表于 2020-3-20 11:03:43

本帖最后由 徘徊浅行 于 2020-3-20 11:20 编辑

if(i>strlen((*p))-1)//i==4, j==4的时候strlen-1==3
直接退出j循环,退出j循环后面再有字符也无法打印了,
++i==5,i!<5不满足条件 退出两个循环
与其猜测是哪里出了错,把你越界的错误来看看

徘徊浅行 发表于 2020-3-20 11:22:12

q5462310 发表于 2020-3-19 22:05
你的I和J应该打反了

{:10_256:}把与题目的ji 反过来的确会越界,可我是按题目着来啊。

magicpower 发表于 2020-3-21 02:13:46

没看题目,盲猜是用3维数组指针访问了二维数组,第一个图箭头是三维数组指针,第二个图是二维数组指针

q5462310 发表于 2020-3-21 13:01:55

徘徊浅行 发表于 2020-3-20 11:22
把与题目的ji 反过来的确会越界,可我是按题目着来啊。

...第一个图越界 第二个图正常啊

q5462310 发表于 2020-3-21 13:05:32

徘徊浅行 发表于 2020-3-20 11:22
把与题目的ji 反过来的确会越界,可我是按题目着来啊。

我又试了一下 不知道为啥又不越界了。。。上次还越界呢 而且小甲鱼答案说的写成这样会越界。。。

q5462310 发表于 2020-3-21 13:12:25

本帖最后由 q5462310 于 2020-3-21 13:26 编辑

理解错了

q5462310 发表于 2020-3-21 13:14:48

本帖最后由 q5462310 于 2020-3-21 13:26 编辑

我理解错了

q5462310 发表于 2020-3-21 13:20:30

4goodworld 发表于 2020-3-19 19:38
你看下这个判断条件
如果
它的意图是如果你是一个字符串的结尾,我就跳出了


可是为什么代码是要i > strlen((*p)- 1 )呢不应该是i > strlen((*p) 吗   如果是 *pj-1 第五个字符串是五个的话只会打印出来四个

q5462310 发表于 2020-3-21 13:30:25

4goodworld 发表于 2020-3-19 19:38
你看下这个判断条件
如果
它的意图是如果你是一个字符串的结尾,我就跳出了


我搞懂了 不过事实上那个代码也不会越界 因为这题小甲鱼有点弄错了p不会取到 因为p就等于‘\0' 就break了

q5462310 发表于 2020-3-21 13:31:06

徘徊浅行 发表于 2020-3-20 11:22
把与题目的ji 反过来的确会越界,可我是按题目着来啊。

我搞懂了 这题小甲鱼有点弄错了p不会取到 因为p就等于‘\0' 就break了 如果最后一个字符串再短一位就不行了

q5462310 发表于 2020-3-21 13:34:16

q5462310 发表于 2020-3-21 13:31
我搞懂了 这题小甲鱼有点弄错了p不会取到 因为p就等于‘\0' 就break了 如果最后一个字符串 ...

或者中途哪个字符变成四个以下 也会越界

4goodworld 发表于 2020-3-21 13:55:48

q5462310 发表于 2020-3-21 13:30
我搞懂了 不过事实上那个代码也不会越界 因为这题小甲鱼有点弄错了p不会取到 因为p就等于 ...

你再推导下

当i=4的时候,你看看能不能执行到j=4
如果能出现,那么(*p)就能取到,那么就是越界了

永远的渣滓 发表于 2020-3-21 14:30:36

路过,学习学习~
页: [1] 2
查看完整版本: 练习23疑惑!求解