鱼C论坛

 找回密码
 立即注册
查看: 1588|回复: 21

[已解决]练习23疑惑!求解

[复制链接]
发表于 2020-3-19 19:38:50 | 显示全部楼层 |阅读模式
20鱼币
图1.png 想问一下为什么这样写就会越界 越的是指针变量里4个字符数的界吗?
QQ截图20200319193557.png 这里又是怎么解决越界问题的 有点看不懂啊 求大佬
最佳答案
2020-3-19 19:38:51
本帖最后由 4goodworld 于 2020-3-19 22:34 编辑


                               
登录/注册后可看大图

你看下这个判断条件
如果
  1. (*p)[j][i]=='\0' break
复制代码

它的意图是如果你是一个字符串的结尾,我就跳出了
看似没问题,但最大的问题是j和i的范围定义在<5,这啥意思,也就是j和i最大的可能取值是j=4,i=4
那么问题来了
  1. (*p)[j][i]
复制代码
假设刚好是j和i取值最大的时候,也就是(*p)[4][4],从面上逻辑看,没问题,没有越界
但结合实际来看
如果是 (*p)[4] 是不是意味指 指向的是 “wow” 这个值
很明显,“wow”只有三个字符,
但你却(*p)[4][4] ?你觉得你取出来的啥?

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

最佳答案

查看完整内容

你看下这个判断条件 如果 它的意图是如果你是一个字符串的结尾,我就跳出了 看似没问题,但最大的问题是j和i的范围定义在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-19 19:38:51 | 显示全部楼层    本楼为最佳答案   
本帖最后由 4goodworld 于 2020-3-19 22:34 编辑


                               
登录/注册后可看大图

你看下这个判断条件
如果
  1. (*p)[j][i]=='\0' break
复制代码

它的意图是如果你是一个字符串的结尾,我就跳出了
看似没问题,但最大的问题是j和i的范围定义在<5,这啥意思,也就是j和i最大的可能取值是j=4,i=4
那么问题来了
  1. (*p)[j][i]
复制代码
假设刚好是j和i取值最大的时候,也就是(*p)[4][4],从面上逻辑看,没问题,没有越界
但结合实际来看
如果是 (*p)[4] 是不是意味指 指向的是 “wow” 这个值
很明显,“wow”只有三个字符,
但你却(*p)[4][4] ?你觉得你取出来的啥?

关于解决方法的图片,
其实这个strlen 就是 让  (*p)[4] 这个指向的字符串进行比较下长度,当出现明明就3个字符的,我肯定不会让for循环出现 (*p)[4][4] 的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-19 20:21:01 From FishC Mobile | 显示全部楼层
该发图片的发图片
该发文本的发文本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-19 20:45:29 | 显示全部楼层
运行都没问题啊?也没越界啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-19 22:03:22 | 显示全部楼层
徘徊浅行 发表于 2020-3-19 20:45
运行都没问题啊?也没越界啊?

第一个越界啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-19 22:04:06 | 显示全部楼层
wp231957 发表于 2020-3-19 20:21
该发图片的发图片
该发文本的发文本

是图片和文本呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-19 22:05:07 | 显示全部楼层
徘徊浅行 发表于 2020-3-19 20:45
运行都没问题啊?也没越界啊?

你的I和J应该打反了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 11:03:43 From FishC Mobile | 显示全部楼层
本帖最后由 徘徊浅行 于 2020-3-20 11:20 编辑

if(i>strlen((*p)[j])-1)//i==4, j==4的时候strlen-1==3
直接退出j循环,退出j循环后面再有字符也无法打印了,
++i==5,i!<5不满足条件 退出两个循环
与其猜测是哪里出了错,把你越界的错误来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 11:22:12 From FishC Mobile | 显示全部楼层
q5462310 发表于 2020-3-19 22:05
你的I和J应该打反了

把与题目的j  i 反过来的确会越界,可我是按题目着来啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 02:13:46 From FishC Mobile | 显示全部楼层
没看题目,盲猜是用3维数组指针访问了二维数组,第一个图箭头是三维数组指针,第二个图是二维数组指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 13:01:55 | 显示全部楼层
徘徊浅行 发表于 2020-3-20 11:22
把与题目的j  i 反过来的确会越界,可我是按题目着来啊。

...第一个图越界 第二个图正常啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 13:05:32 | 显示全部楼层
徘徊浅行 发表于 2020-3-20 11:22
把与题目的j  i 反过来的确会越界,可我是按题目着来啊。

我又试了一下 不知道为啥又不越界了。。。上次还越界呢 而且小甲鱼答案说的写成这样会越界。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 13:12:25 | 显示全部楼层
本帖最后由 q5462310 于 2020-3-21 13:26 编辑

理解错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 13:14:48 | 显示全部楼层
本帖最后由 q5462310 于 2020-3-21 13:26 编辑

我理解错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 13:20:30 | 显示全部楼层
4goodworld 发表于 2020-3-19 19:38
你看下这个判断条件
如果
它的意图是如果你是一个字符串的结尾,我就跳出了

可是为什么代码是要i > strlen((*p)[j]- 1 )呢  不应该是i > strlen((*p)[j] 吗   如果是 *pj-1 第五个字符串是五个的话  只会打印出来四个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 13:30:25 | 显示全部楼层
4goodworld 发表于 2020-3-19 19:38
你看下这个判断条件
如果
它的意图是如果你是一个字符串的结尾,我就跳出了

我搞懂了 不过事实上那个代码也不会越界 因为这题小甲鱼有点弄错了  p[4][4]不会取到 因为p[1][4]就等于‘\0' 就break了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 13:31:06 | 显示全部楼层
徘徊浅行 发表于 2020-3-20 11:22
把与题目的j  i 反过来的确会越界,可我是按题目着来啊。

我搞懂了 这题小甲鱼有点弄错了  p[4][4]不会取到 因为p[1][4]就等于‘\0' 就break了 如果最后一个字符串再短一位就不行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 13:34:16 | 显示全部楼层
q5462310 发表于 2020-3-21 13:31
我搞懂了 这题小甲鱼有点弄错了  p[4][4]不会取到 因为p[1][4]就等于‘\0' 就break了 如果最后一个字符串 ...

或者中途哪个字符变成四个以下 也会越界
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 13:55:48 | 显示全部楼层
q5462310 发表于 2020-3-21 13:30
我搞懂了 不过事实上那个代码也不会越界 因为这题小甲鱼有点弄错了  p[4][4]不会取到 因为p[1][4]就等于 ...

你再推导下

当i=4的时候,你看看能不能执行到j=4
如果能出现,那么(*p)[4][4]就能取到,那么就是越界了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-21 14:30:36 | 显示全部楼层
路过,学习学习~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 22:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表