请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

字符串问题

图片描述

老师您好,我又来了,
能问你一个我书上看到的问题吗,选自《大话数据结构》5.7.3,如上图,
他那个next数组,应该是我调用的方式不对吧,感觉怪怪的, get_next(string, &next);方法之前,string还有值,调完以后,就变成0x100000000了,方法里面貌似也没有去修改string指针那边的内存,

正在回答

1回答

main 函数的代码也是书上的吗?不会吧。。。int *next 需要的是一个数组,你给人家传了一个整型变量的地址,当成数组,可以简单认为是传了一个大小为 1 的数组,必然会导致数组越界。

一般来说,stack 的内存应该是倒着分配的,next[1] 就是 next 变量所在内存之后的内存,正好是 char * 这个字符串的地址。。。。所以字符串就被非法修改了。。。你试试看是不是这样。。

1 回复 有任何疑惑可以回复我~
  • 提问者 十三山入秋 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-01-27 18:03:04
  • 提问者 十三山入秋 #2
    来了来了,
    main函数不是书上的
    我以为,传一个指针,然后用指针加 [数字],就可以访问 指针 后面以该类型为步长 相应的偏移量位置的数据来着
    ---------------------
    刚才又试了一下,除了用指针加上一个值,来到达自己想访问的地址,确实也可以直接用指针后面加方括号的形式,来到达自己想要的地址位置。应该是语义上有区别。
    
    就是传参时候,一个参数又有问题,会影响另一个变量,感觉有点 奇怪
    回复 有任何疑惑可以回复我~ 2021-01-27 18:05:41
  • bennyhuo 回复 提问者 十三山入秋 #3
    这有啥奇怪的,我在课里面有一节讲到过这块儿。C 语言本来就是可以直接操作内存,内存又就是一个地址,我们甚至可以通过一个整数来强转成指针去访问内存,因此很容易写出不安全的代码。
    回复 有任何疑惑可以回复我~ 2021-01-27 18:12:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信