| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 839 人关注过本帖
标题:请教:C语言里溢出问题
只看楼主 加入收藏
ITMM
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-8-22
收藏
 问题点数:0 回复次数:4 
请教:C语言里溢出问题
我用的机器是32位的
写了一个关于结构体的小程序:
源程序如下:
#include<stdio.h>
#include<string.h>
struct stu
{
int num;
char name[20];
float score[3];
};
int print(struct stu *p )
{
printf("num:%d\nname:%s\nscore[0]:%f\nscore[1]:%f\nscore[2]:%f\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
return 0;
}
int main()
{
struct stu student;
struct stu *p;
p=&student;
student.num=0213321;
strcpy(student.name,"na na");
student.score[0]=98.5;
student.score[1]=88.5;
student.score[2]=90.0;
print(p);
return 0;
}
输出结果:
num:71377
name:na na
score[0]:98.500000
score[1]:88.500000
score[2]:90.000000
问题:正常情况下:num:0213321
现在num:71377
一开始找不到错误,忽然怀疑可能是int值范围的问题,于是把student.num=0213321改为21
然后输出就正常了,不过,32位int应该是4个字节,感觉没有达到它的最大值?为什么出现这种问题啊?
还有,超过最大值的时候,是编译器随机给num分配一个值吗?哪位高手可以解答一下啊?不胜感谢!呵呵
搜索更多相关主题的帖子: C语言 
2007-01-26 15:46
大宝子
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-28
收藏
得分:0 
num为int型,0打头开始编译器认为是8进制
我菜鸟一个 也许不是这样
2007-01-26 15:54
csight
Rank: 1
等 级:新手上路
威 望:1
帖 子:293
专家分:0
注 册:2006-6-11
收藏
得分:0 
ls讲的没错;
如果lz想用0打头来记录学号,
建议用char*型;

头可断,发型不可乱;血可流,皮鞋不可不擦油;
2007-01-26 16:08
ITMM
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-8-22
收藏
得分:0 
呵呵,好像是这个问题,不应该以0打头,谢谢啊,不过还想问个问题。如果编译器把以0开头的看作是八进制,那么0213321的八进制是71377吗?感觉还是有点不太对呢,谁能解释一下啊?期待中,谢谢

2007-01-26 16:20
大宝子
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-28
收藏
得分:0 

你弄反了213321是八进制71377正好是他的十进制 当int型为4个字节的时候71377可以正常显示
printf("%d",71377)结果为71377并没有越界 2个字节的时候才越界呢

2007-01-26 16:50
快速回复:请教:C语言里溢出问题
数据加载中...
 
   



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

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