| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 893 人关注过本帖
标题:大神们看看,这个while中的j+=2;错在那儿
只看楼主 加入收藏
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
收藏
得分:0 
回复 10楼 有容就大
有,循环运行了不知多久会停止,可能是碰到了内存其他的地方的'\0'
2012-08-10 12:47
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

谢谢各位的回答,我终于找到问题所在了,读文件结束后我把str[i]='\0';改成了str[--i]='\0';就OK了,我想应该是ifstream的file.get()函数返回值的问题。
上图是未改之前的输出截图,里面顶上是文本文档全选后的样子,下面黑的是程序测试,第三行末尾"_"是我加的,以标示字符串终结位置,cout<<str<<'_'<<endl;。利用第四行的标尺,一看就不对:源文件只有22长度,读取后却成了total=23,而且更诡异的是,程序把'n'后面多出来的不知道什么东西(暂且称为'x',判断应该是str[j]<0的)和最末尾的'\0'合成一个中文字符输出(因为系统就是这样的,只要是第8位为1,则连同后面的字符一起合成一个中文字符显示,这里因为合成的编码不在中文字库中,因此显示不出来,但占两个字节),但末尾的'\0'仍旧起结束字符串的作用,这样'\0'被变相输出,所以字符串结尾'_'在24的位置。常理输出是'\0'不输出,'_'应该在'n'后面的,也就是22的位置。这样在循环中,j指向'x'时,由于str[[j]<0,进入第一个条件,j+=2;,刚好跳过'\0',完了就越界了。而用j++; if (j!=i) j++;这样的话,j++后由于j==i,就不再加了,此时j刚好指向'\0',循环就结束了。
2012-08-10 17:03
快速回复:大神们看看,这个while中的j+=2;错在那儿
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016948 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved