练习23疑惑!求解
想问一下为什么这样写就会越界 越的是指针变量里4个字符数的界吗?这里又是怎么解决越界问题的 有点看不懂啊 求大佬 本帖最后由 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) 的问题 该发图片的发图片
该发文本的发文本 运行都没问题啊?也没越界啊?{:5_99:} 徘徊浅行 发表于 2020-3-19 20:45
运行都没问题啊?也没越界啊?
第一个越界啊 wp231957 发表于 2020-3-19 20:21
该发图片的发图片
该发文本的发文本
是图片和文本呀 徘徊浅行 发表于 2020-3-19 20:45
运行都没问题啊?也没越界啊?
你的I和J应该打反了 本帖最后由 徘徊浅行 于 2020-3-20 11:20 编辑
if(i>strlen((*p))-1)//i==4, j==4的时候strlen-1==3
直接退出j循环,退出j循环后面再有字符也无法打印了,
++i==5,i!<5不满足条件 退出两个循环
与其猜测是哪里出了错,把你越界的错误来看看
q5462310 发表于 2020-3-19 22:05
你的I和J应该打反了
{:10_256:}把与题目的ji 反过来的确会越界,可我是按题目着来啊。 没看题目,盲猜是用3维数组指针访问了二维数组,第一个图箭头是三维数组指针,第二个图是二维数组指针 徘徊浅行 发表于 2020-3-20 11:22
把与题目的ji 反过来的确会越界,可我是按题目着来啊。
...第一个图越界 第二个图正常啊 徘徊浅行 发表于 2020-3-20 11:22
把与题目的ji 反过来的确会越界,可我是按题目着来啊。
我又试了一下 不知道为啥又不越界了。。。上次还越界呢 而且小甲鱼答案说的写成这样会越界。。。 本帖最后由 q5462310 于 2020-3-21 13:26 编辑
理解错了 本帖最后由 q5462310 于 2020-3-21 13:26 编辑
我理解错了 4goodworld 发表于 2020-3-19 19:38
你看下这个判断条件
如果
它的意图是如果你是一个字符串的结尾,我就跳出了
可是为什么代码是要i > strlen((*p)- 1 )呢不应该是i > strlen((*p) 吗 如果是 *pj-1 第五个字符串是五个的话只会打印出来四个 4goodworld 发表于 2020-3-19 19:38
你看下这个判断条件
如果
它的意图是如果你是一个字符串的结尾,我就跳出了
我搞懂了 不过事实上那个代码也不会越界 因为这题小甲鱼有点弄错了p不会取到 因为p就等于‘\0' 就break了 徘徊浅行 发表于 2020-3-20 11:22
把与题目的ji 反过来的确会越界,可我是按题目着来啊。
我搞懂了 这题小甲鱼有点弄错了p不会取到 因为p就等于‘\0' 就break了 如果最后一个字符串再短一位就不行了 q5462310 发表于 2020-3-21 13:31
我搞懂了 这题小甲鱼有点弄错了p不会取到 因为p就等于‘\0' 就break了 如果最后一个字符串 ...
或者中途哪个字符变成四个以下 也会越界 q5462310 发表于 2020-3-21 13:30
我搞懂了 不过事实上那个代码也不会越界 因为这题小甲鱼有点弄错了p不会取到 因为p就等于 ...
你再推导下
当i=4的时候,你看看能不能执行到j=4
如果能出现,那么(*p)就能取到,那么就是越界了 路过,学习学习~
页:
[1]
2