| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1094 人关注过本帖
标题:很奇怪的一个问题
只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:8 
很奇怪的一个问题
下面这个程序
经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
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:50 
在下次使用数组前 清零  类似 for(j=0;j<6;j++) a[j]='\0';
程序代码:
#include <stdio.h>
#include <stdlib.h>
int  main() {
    char a[6];
    int i,j;
    for(i=0; i<=32; i++) {
        itoa(i,a,2);
        printf("%s\n",a);
        for(j=0;j<6;j++) a[j]='\0';
    }
    return 0;
}


[此贴子已经被作者于2016-9-5 07:10编辑过]


DO IT YOURSELF !
2016-09-05 07:06
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 2楼 wp231957
谢谢,我刚发现把数组改大一点,比如改成a[7]也不会出现。我想可能是\0溢出造成的。
不同电脑的溢出情况可能不一样,所以造成有的电脑可以,有的电脑不行。
2016-09-05 07:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:50 
32转化为二进制字符串是 "100000" 一共7个字符(包括结尾的'\0')
2016-09-05 09:37
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分: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
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
我用dev c++调试发现,如果定义的是a[6],那么a[6]的地址和i一样。如果定义的是a[7]
那么a[6]就比i的地址小1。请问这正常吗?
2016-09-05 21:41
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
楼主你好 看过你写的代码 我有个地方看不懂

   #include <stdio.h>
    #include <stdlib.h>
     main()
     {
         char a[6];
         int i;
         for(i=0;i<=32;i++)
         {
             itoa(i,a,2);   itoa刚刚百度了,可是括号(i,a,2)是什么意思?
         printf("%s\n",a);
             a[5]='\0';
         }
    }      
         
              
         
   

早知做人那么辛苦!  当初不应该下凡
2016-09-18 22:06
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 7楼 炎天
(i,a,2)的意思是把整数i转为字符串a表示的2进制数。
2016-09-19 07:11
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
回复 8楼 ehszt
谢谢,我知道了, 很感谢你的解答!

早知做人那么辛苦!  当初不应该下凡
2016-09-19 23:52
快速回复:很奇怪的一个问题
数据加载中...
 
   



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

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