标题:计数溢出
只看楼主
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
 问题点数:0 回复次数:7 
计数溢出
使用
void printfit()
{
    char sz[2];
    sprintf(sz,"%d",g_iShared);
    puts(sz);
}
时,为什么只能显示到10 ??而不是到99 才溢出呢 ??

error.JPG (57.31 KB)
搜索更多相关主题的帖子: 溢出 计数 
2008-10-25 16:01
沼泽
Rank: 4
等 级:业余侠客
威 望:8
帖 子:291
专家分:228
注 册:2008-9-15
得分:0 
char sz[2];
sz里面还有有结束符的空间'\0'所以你申请的2字节的空间
其实只能装1字节的字符,因此到10就溢出了
2008-10-26 08:51
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
回复 2# 沼泽 的帖子
怎么 连续输出了两个 10 后出问题?
前面的两个 10 没有问题?

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-10-26 11:10
沼泽
Rank: 4
等 级:业余侠客
威 望:8
帖 子:291
专家分:228
注 册:2008-9-15
得分:0 
不好意思,我也不太清楚
2008-10-26 18:55
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
回复 4# 沼泽 的帖子
哈哈 ,没关系了,大家一起讨论进步就好了

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-10-27 00:55
nwpu063417
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:428
专家分:28
注 册:2007-5-11
得分:0 
没能看到这个问题的完整代码,但我觉得有可能是内存中栈溢出,或者是指针的错误

2008-10-27 22:45
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
完整代码
#include <stdio.h>
#include <windows.h>

int g_iShared = 0;


void printfit()
{
    char sz[2];
    sprintf(sz,"%d",g_iShared);
    puts(sz);
}

int __cdecl main()
{
    while(true){
        printfit();
        int iNew = g_iShared +1;
        if (iNew == 10)
        {
        //    iNew = 0;
        }
        g_iShared = iNew;
        Sleep(1000);
    }
    return 0;
}

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-10-28 00:43
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
得分:0 
明显越界了。
就像2楼说的,sz只有两个字节的长度,当到10时,第一个字节存放49,第二个存48,但最后还要有一个'\0'要存入,数组长度不够,当然要越界了。
至于楼主说的第一个10没问题那可能是编译器的问题吧。我用VS2003,第一个10程序就挂了。

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-10-28 14:52



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




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

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