标题:很奇怪的一个问题
取消只看楼主
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
结帖率:100%
已结贴  问题点数:100 回复次数:4 
很奇怪的一个问题
下面这个程序
经dev c++编译,运行不断刷屏。经调试,在循环的过程中打印同时打印i,
i的值从0到31循环变化,就是到不了32。
而去掉itoa()函数,i的变化很正常。
我用minGW的gcc命令行编译,执行程序会出现同样的问题。
而我问论坛上的几个朋友,他们都说没出现这样的现象。
经发现,循环最大数改为31或以下就不会出现循环不中止问题,32或以上才会出现。
论坛上高手云集,有人知道是为什么吗?
#include <stdio.h>
   #include <stdlib.h>
    main()
    {
        char a[6];
        int i;
        for(i=0;i<=32;i++)
        {
            itoa(i,a,2);
        printf("%s\n",a);
            a[5]='\0';
        }
   }
搜索更多相关主题的帖子: include 朋友 
2016-09-04 21:14
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 2楼 wp231957
谢谢,我刚发现把数组改大一点,比如改成a[7]也不会出现。我想可能是\0溢出造成的。
不同电脑的溢出情况可能不一样,所以造成有的电脑可以,有的电脑不行。
2016-09-05 07:47
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
我用dev c++调试发现,如果定义的是a[6],那么a[6]的地址和i一样。如果定义的是a[7]
那么a[6]就比i的地址小1。请问这正常吗?
2016-09-05 21:41
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
我用dev c++调试发现,如果定义的是a[6],那么a[6]的地址和i一样。如果定义的是a[7]
那么a[6]就比i的地址小1。请问这正常吗?
2016-09-05 21:41
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 7楼 炎天
(i,a,2)的意思是把整数i转为字符串a表示的2进制数。
2016-09-19 07:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-468494-1-1.html




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

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