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

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

2012-03-18 
C语言,求结构数组元素个数32位平台下,现有以结构体:struct data{unsigned int a// 4 bytesunsigned char

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]) 

热点排行