| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 839 人关注过本帖
标题:请教:C语言里溢出问题
取消只看楼主 加入收藏
ITMM
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-8-22
收藏
 问题点数:0 回复次数:1 
请教: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
ITMM
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-8-22
收藏
得分:0 
呵呵,好像是这个问题,不应该以0打头,谢谢啊,不过还想问个问题。如果编译器把以0开头的看作是八进制,那么0213321的八进制是71377吗?感觉还是有点不太对呢,谁能解释一下啊?期待中,谢谢

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



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

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