读书人

C语言求结构数组元素个数,该如何处理

发布时间: 2012-03-18 13:55:39 作者: rapoo

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)

[解决办法]

探讨
里面对于unsigned char * s怎么考虑?它可是不定长的啊.

[解决办法]
如果s不定长,那么das也生成不了,会编译出出错, 这里char * 是一个指针 ,属于定常。
[解决办法]
unsigned char * s; // 不定长的字符串指针
------------
跟这个有什么关系,结构data保存的是指针,在32位平台下,指针占4位。属于定长。sizeof(das)/sizeof(data)
[解决办法]
探讨
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的元素个数,谢谢-------
---------------------------------------
上述描述有些问题, 结构体保存的是指…

[解决办法]
在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));}
[解决办法]

探讨
在X86下 struct data是四字节对齐 sizeof(struct data)是12个字节 因此sizeof(struct das)/sizeof(struct data)可以求出个数

[解决办法]
C/C++ code
#define num sizeof(das)/sizeof(das[0]) 

读书人网 >C语言

热点推荐