C语言,求结构数组元素个数
32位平台下,现有以结构体:
struct data{
unsigned int a; // 4 bytes
unsigned char * s; // 不定长的字符串指针
unsigned short v; // 2 bytes
};
数组
struct data das[] =
{
{0,"abc",0},{0,"abc",0},{0,"abc",0},...{0,"abc",0}
};
请问,怎样获得数组das的元素个数,谢谢
[解决办法]
struct data x
sizeof(x.dax)/sizeof(x.dax[0]))
[解决办法]
32位平台下,现有以结构体:
struct data{
unsigned int a; // 4 bytes
unsigned char * s; // 不定长的字符串指针
unsigned short v; // 2 bytes
};
数组
struct data das[] =
{
{0,"abc",0},{0,"abc",0},{0,"abc",0},...{0,"abc",0}
};
请问,怎样获得数组das的元素个数,谢谢-------
---------------------------------------
上述描述有些问题, 结构体保存的是指针,而不是字符串。所以对于 这种来说 只要 sizeof(das)/sizeof(data) 就可以,不过前提 要采用字节对齐方式,免得结构大小与按字节算出的不一致
[解决办法]
sizeof(das)/sizeof(data)
[解决办法]
[解决办法]
如果s不定长,那么das也生成不了,会编译出出错, 这里char * 是一个指针 ,属于定常。
[解决办法]
unsigned char * s; // 不定长的字符串指针
------------
跟这个有什么关系,结构data保存的是指针,在32位平台下,指针占4位。属于定长。sizeof(das)/sizeof(data)
[解决办法]
[解决办法]
在X86下 struct data是四字节对齐 sizeof(struct data)是12个字节 因此sizeof(struct das)/sizeof(struct data)可以求出个数
[解决办法]
这样可得:
- C/C++ code
#include<stdio.h>struct data{ unsigned int a; unsigned char s[4]; unsigned short v; }; struct data das[] = { {0,"abc",0},{0,"abc",0},{0,"abc",0},{0,"abc",0} }; void main(){ printf("%d\n",sizeof(das)/sizeof(data));}
[解决办法]
sizeof(das)/sizeof(data)
这样肯定不行的, data 不是类型! struct data 才是类型!
[解决办法]
- C/C++ code
#include<stdio.h>struct data{ unsigned int a; // 4 bytes char *s; // ²»¶¨³¤µÄ×Ö·û´®Ö¸Õë unsigned short v; // 2 bytes }; struct data das[] = { {0,"abc",0},{0,"abc",0},{0,"abc",0},{0,"abc",0} }; void main(){ printf("%d\n",sizeof(das)/sizeof(data));}
[解决办法]
[解决办法]
- C/C++ code
#define num sizeof(das)/sizeof(das[0])