随缘XD 2024-01-03 23:48 采纳率: 100%
浏览 6
已结题

指针pA与pB方案和指针pA与pA+i方案区别很大吗?

看到一个题目。
期望实现的功能,把所有\0字符移动到字符串结尾

img


原方案失败了,

img


改进方案成功了,

img


在原方案调试时,跑到循环中if为true时函数就结束了,不清楚为什么结束,最终没有实现功能。
我在改进中把pB指针用pA+i代替,方案可以使用,现在我的问题是原方案为什么会失败。

原方案调试

img


如图,当pB指针指向第一个\0字符时,在进入while循环的一瞬间,整个函数就结束并且return了,我不明白为什么

改进方案也有问题必须输入str[64]等才能成功运行,i的形式使如果字符串后面没有冗余,一定会溢出,目前试了好几个新方案都没有解决,正在改进中。
失败方案

img

img


报错,堆栈已损坏,结果出来后,程序崩了

img


难道这种写法是有问题的?

又一个失败方案

img


我尝试防止i的溢出,失败了,不能运行
这个报错我还看不懂

根据我的发现1,我现在在尝试用sizeof改进。

有了思路,一切都好办

img

img


但是我不确定这些“烫”的码是什么,
我对于“锟斤拷”的原理还有一些印象,
如果这些烫是\0字符的解释错误,那么我已经成功了,现在,新的问题出现了,为什么这些“烫”会打印出来呢?

取得重点进展,基本成功了
最后的问题

img


就是这些ASCII的-52是怎么来的了
算上字符串char时给我自动在末尾加的\0,七个字符都移动到了末尾,数据处理是成功的,剩下的就是打印方面的问题了。

  • 写回答

3条回答 默认 最新

  • 随缘XD 2024-01-04 12:55
    关注

    发现1:
    我找到原方案的错误了,strlen函数在数字符串长度时,数到\0就会结束,所以strlen(str)的值并不是想象中的长度,这是strlen函数在编写时的构造,所以如果不是要的\0就没有这个问题。
    我现在在找其它失败方案的问题。
    发现2:
    最终方案,

    img


    当最后一次运行指针指向\0时,因为指针得到ASCII:0,自动判断成了未知字符,然后又自动改写成了ASCII:-52(未知字符),经此改动,问题终于解决了,唯一的不足就是在while里写了一个return感觉怪怪的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 已采纳回答 1月4日
  • 修改了问题 1月4日
  • 修改了问题 1月4日
  • 展开全部

悬赏问题

  • ¥15 office打开卡退(新电脑重装office系统后)
  • ¥300 FLUENT 火箭发动机燃烧EDC仿真
  • ¥15 【Hadoop 问题】Hadoop编译所遇问题hadoop-common: make failed with error code 2
  • ¥15 vb6.0+webbrowser无法加载某个网页求解
  • ¥15 RPA财务机器人采购付款流程
  • ¥15 计算机图形多边形及三次样条曲线绘制
  • ¥15 根据protues画的图用keil写程序
  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误
  • ¥20 cesm的气溶胶排放文件