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

一个简单结构体程序例子疑问?该如何解决

2012-03-06 
一个简单结构体程序例子疑问?[codeC/C++][/code]#includeStdio.hmain(void){struct student{int numch

一个简单结构体程序例子疑问?
[code=C/C++][/code]#include<Stdio.h>
main(void)
{
struct student{
int num;
  char name[20];
char sex;
char addr[20];
}a;
printf("%d:\n",sizeof(a));//疑问?为何打印的地址为48?按计算应该是45
printf("输入学生信息:\n");
scanf("%d",&a.num);//疑问,为何不能向这个变量写东西,报个内存不能写的错误,这个变量已经分配了相应的内存应该能够往里面写东西啊
scanf("%c",a.sex);
scanf("%s",a.name);
scanf("%s",a.num);
printf("%d,%s,%c,%s\n",a.num,a.name,a.sex,a.addr);
}

[解决办法]
楼主请google“字节对齐”
[解决办法]
scanf("%d",&a.num);//疑问,为何不能向这个变量写东西,报个内存不能写的错误,这个变量已经分配了相应的内存应该能够往里面写东西啊
scanf("%c",a.sex);
scanf("%s",a.name);
scanf("%s",a.num);//这边打错了吧。。。应该是scanf("%s",a.addr);..num是int型的
[解决办法]

C/C++ code
#include <stdio.h>void main(void){    //强制1字节对齐    #pragma pack(1)    struct student{        int num;        char name[20];        char sex;        char addr[20];    }a;    #pragma pack()        printf("%d:\n",sizeof(a));//结构体字节对齐,强制1字节对齐得到结果便是45    printf("输入学生信息:\n");    scanf("%d",&a.num);    scanf("%c",&a.sex);//这里导致错误内存不可写错误    scanf("%s",a.name);    scanf("%s",a.addr);    printf("%d,%s,%c,%s\n",a.num,a.name,a.sex,a.addr);} 

热点排行