strlen问题,请帮忙。

[复制链接]
查看11 | 回复7 | 2011-4-11 01:25:06 | 显示全部楼层 |阅读模式
main()
{
int num;
char amap[] = {\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\'};
num=strlen(amap);
printf(\"\\n%d\",num);
}
为什么结果会是15,不是应该为10吗?
回复

使用道具 举报

千问 | 2011-4-11 01:25:06 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">结果未必是15,也有可能是10,11, 或别的值,接下来我简单分析一下。
strlen()判断一个字符串的时候,以‘\\0\'为结尾标志。而你对字符数组amap赋值的时候,并没有放\'\\0\'这个字符串结尾标志,所以当执行到strlen(amap)的时候,加入系统最开始分配给amap的那段地址是干净的,结果就是正确的。如果那段内存地址里面有垃圾数据,就被会当作是amap的一部分,直到遇到\'\\0\'。 你可以用一个简单的循环,把每一个字符打印出来,你就能看到”脏数据“了。
解决办法: char amap[] = {\'0\', ....\'9\', \'\\0\'}, 或者 char amap[11]; strcpy(amap, \"0123456789\");
希望对你有帮助











参考资料:<span class=\"gray\">原创</span>
回复

使用道具 举报

千问 | 2011-4-11 01:25:06 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-4043822\">就不明白为什么结果为15,除非我的电脑出现问题了.重启也没用.
回复

使用道具 举报

千问 | 2011-4-11 01:25:06 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-4043862\">我刚运行了,是11没错的
回复

使用道具 举报

千问 | 2011-4-11 01:25:06 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-4043998\">呵呵,谢谢.应该是11的.今天不知道出什么问题了,我的电脑就得不到正确答案.
回复

使用道具 举报

千问 | 2011-4-11 01:25:06 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-4044144\">确实,这样初始化字符数组需要显式给出“\\0”
加了‘\\0’后结果是10,也应该是10!
回复

使用道具 举报

千问 | 2011-4-11 01:25:06 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-4044150\">一般字符数组都是我那样赋值的吧,\\0应该是系统自动加上去的,不必手动加
回复

使用道具 举报

千问 | 2011-4-11 01:25:06 | 显示全部楼层
<pre class=\"replyask-text\" id=\"content-4044387\">如果你把 前一句 改为int num=0;的话就正常了。
如果把字符串赋值字符数组确实会加0,比如char amap[]=\"123456\",但是你那样是绝不会自动加的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行