首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这样不会造成机构体溢出么解决方案

2012-02-23 
这样不会造成机构体溢出么#includestdio.h#includestdlib.h#includedos.hvoidmain(void){structCMOS

这样不会造成机构体溢出么
#include   <stdio.h>
#include   <stdlib.h>
#include   <dos.h>

void   main(void)
{
            struct   CMOS   /*一共32项*/
            {
                  unsigned   char   current_second;
                  unsigned   char   alarm_second;
                  unsigned   char   current_minute;
                  unsigned   char   alarm_minute;
                  unsigned   char   current_hour;
                  unsigned   char   alarm_hour;
                  unsigned   char   current_day_of_week;
                  unsigned   char   current_day;
                  unsigned   char   current_month;
                  unsigned   char   current_year;
                  unsigned   char   status_registers[4];
                  unsigned   char   diagnostic_status;
                  unsigned   char   shutdown_code;
                  unsigned   char   drive_types;
                  unsigned   char   reserved_x;
                  unsigned   char   disk_1_type;
                  unsigned   char   reserved;
                  unsigned   char   equipment;
                  unsigned   char   lo_mem_base;
                  unsigned   char   hi_mem_base;
                  unsigned   char   hi_exp_base;
                  unsigned   char   lo_exp_base;
                  unsigned   char   fdisk_0_type;
                  unsigned   char   fdisk_1_type;
                  unsigned   char   reserved_2[19];
                  unsigned   char   hi_check_sum;
                  unsigned   char   lo_check_sum;
                  unsigned   char   lo_actual_exp;
                  unsigned   char   hi_actual_exp;
                  unsigned   char   century;
                  unsigned   char   information;
                  unsigned   char   reserved3[12];


        }   cmos;

        char   i;
        char   *pointer;
        char   byte;

        pointer   =   (char   *)   &cmos;

        for   (i   =   0;   i   <   0x34;   i++)/*此处循环52次(52> 32),为什么不会造成指针越界呢?新手,请大家指点一下。*/
        {
                    outportb(0x70,   i);
                    byte   =   inportb(0x71);
                    *pointer++   =   byte;
        }

        clrscr();
        printf( "   This   program   is   to   get   the   CMOS   infomation.\n ");
        printf( "   Some   of   the   CMOS   information   is   as   follows.\n ");
        printf( "   > >   Current   date:   %d/%x/%x ",   cmos.current_month,
                  cmos.current_day,   cmos.century);
        if(cmos.current_year <10)
                printf( "0%d.\n ",cmos.current_year);
        else
                printf( "%d.\n ",cmos.current_year);
        printf( "   > >   Current   time:   %d:%d:%d.\n ",   cmos.current_hour,
                  cmos.current_minute,   cmos.current_second);
        printf( "   > >   Shutdown   type:   %d.\n ",   cmos.shutdown_code);
        printf( "   > >   Hard   disk   type   %d\n ",   cmos.fdisk_0_type);
       
        printf( "   Press   any   key   to   quit... ");
        getch();
        return;
    }

循环到第33次的时候,指针不是指向了结构体外部了么?byte付给谁了啊?

[解决办法]
unsigned char status_registers[4]; //+3 bytes
unsigned char reserved_2[19]; //+18 bytes
unsigned char reserved3[12]; //+11 bytes

共32+3+18+11 = 64bytes

热点排行