21st-Oct 关于string数组: 下一个string数组为什么会受到上一个的影响

来源:互联网 发布:mac tree 编辑:程序博客网 时间:2024/04/30 13:14

log:
之前由于使用char [ ] 数组来求轨迹的长度,但是由于char 数组会在我填充完毕以后自动加上很多的乱码,导致我不能顺利利用strlen的方法求出实际轨迹的长度

然后的办法是利用方向指令,一个string数组的长度来求运动轨迹长度
但是实际操作以后发现还是会出一点问题,见下:

  Starting at Bond Street and taking the steps:  S,S,SE,S     <-这是我导入的方向指令  case1:                                                 case2:  #14||20the symbol :+                                   #14||20the symbol :+  #15||20the symbol :+                                   #15||20the symbol :+  #16||21the symbol :+                                   #16||21the symbol :+  #17||21the symbol :c      <-实际导入的轨迹只到这里为止->    #17||21the symbol :c  #17||22the symbol :#      <-从这里开始是莫名加上的->       #17||21the symbol :c  #17||23the symbol :#                                   #18||23the symbol :+  #17||24the symbol :#  #16||25the symbol : 

导入同一个轨迹但是实际运动却完全不一样,而且本来是能顺利到终点的,结果确实两种错误

观察1. 错误轨迹中:17||22与17||23是真实存在的两个点而且也的确对应着坐标“#”

    说明在点在到达指定位置以后仍然在行驶着,而且还在收到下一方向的指令    也就是说:方向指令的 string 列表出了错误

利用for循环打开case1中的方向指令数组:在输入S,S,SE,S指令以后,实际指令却是:S,S,SE,S + E,E,E,NE, 加上了多余的E,E,E,NE方向指令,而这些方向指令 ,正好对应上了17||22 ~16||25的坐标,说明的确是方向指令的string列表出错

打开负责从char[ ]数组录入信息到方向指令的for 循环,发现终止条件是isalnum(route[route_index]) != 0

观察2. case2之前,在case2之前,上一个测试中,route存储的是,SE,E,E,E,E,E,E,NE指令,剥掉case2中的4个位置,那剩下来的正好是E,E,E,NE方向!!!

     也就是说:route永远是固定在同一条连续的内存单元上,case2之前存了8个内容,那就分配了8个单     位的内存大小,到了case2只有4个内容,那就从连续单元的头开始分配4单位大小,这4个信息覆盖了     上一次route的前四个内容,但是后4个仍然留在了那里,导致这一条内存上看起来是有8个的

问题解决!!
的确是因为上一个route残存下来的位置信息,被放在现在的route后面,在遍历的时候被认为也是方向的一部分

   main()函数里对route赋值完以后,有一个操作是cout << route, 但这时候显示的是长度为4个单   位的route, 原因可能是cout操作是执行的是一种不严格的标准,所以你输入4个,就是4个,但是for   -loop执行的时候用的是严格的标准, 因此紧接其后的都会被用标准审查     
原创粉丝点击