一个简单结构体程序例子疑问?
[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型的
[解决办法]
#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);}