我本仁慈,奈何苍天不许
分类: LINUX
2014-01-15 20:27:40
#include
#include
typedef struct aaa{
int a;
char b[3];
short c;
}AAA;
int main()
{
int a[] = {1,2,3,4,5,6,7};
AAA p;
p = *( (AAA*)a );
printf("%d %s %d %d\n", p.a, p.b, p.c, strlen(p.b));//1, ASSIC码为2字符, 3, 1
printf("%d %s %d %d\n", p.a, p.b, p.c, sizeof(p.b));//1, ASSIC码为2字符, 3, 3
}
数组a(小段模式)
0 |
0 |
0 |
1 |
0 |
0 |
0 |
2 |
0 |
0 |
0 |
3 |
0 |
0 |
0 |
4 |
0 |
0 |
0 |
5 |
0 |
0 |
0 |
6 |
0 |
0 |
0 |
7 |
0 |
0 |
0 |
1 |
|
0 |
0 |
2 |
|
|
0 |
3 |
结构体b
因为p.b是按照字符串的格式输出的,所以当读取到第一个字节为2之后,读取第二个字节时,遇到了’0’,所以就停止了,故输出的就是ASSIC码为2的字符;同理,strlen函数传进去的是字符串,遇到‘0’就停止,故输出为1,而关键字sizeof是计算p.b总共能存放多少字节,所以输出为3。