我正在尝试使用sizeof(_test.header.columns)/sizeof(struct _column)
从我自己的结构中获取“列”元素。不幸的是,我总是将其作为0
,因为sizeof(_test.header.columns)
始终为4
。这是代码:
struct _column{
char title[40];
int length;
};
struct test_struct{
struct{
struct _column* columns;
}header;
struct{
struct _column* columns;
}details;
struct{
struct _column* columns;
}end;
};
struct test_struct _test = {
.header = {
.columns = {
{
"a",
1,
},
{
"ab",
2,
},
},
},
.details = {
.columns = {
{
"b",
2,
},
{
"bc",
3,
},
},
},
.end = {
.columns = {
{
"c",
3,
},
{
"cd",
4,
},
},
},
};
void testme(){
char buff[20];
itoa(sizeof(_test.header.columns)/sizeof(struct _column),buff,sizeof(buff));
MessageBoxA(NULL,buff,NULL,NULL);
}
请帮我解决问题,谢谢。任何帮助将不胜感激。
答案 0 :(得分:0)
它失败的原因是你正在检查指针的sizeof,它返回指针的大小,而不是内存地址指向的实际数组。
如果你知道数组的最大长度,你可以这样声明:
_column[ integerSize ]
但是如果你知道大小,你就不会使用sizeof来查询它,我想;-)你可以通过添加描述列数组大小的int类型的另一个属性来扩展struct吗?
答案 1 :(得分:0)
您可能会尝试按照以下方法执行相同类型的初始化,但是您将列计数本身包含在其中。
struct _column{
char title[40];
int length;
};
struct test_struct{
struct{
struct _column* columns;
int nColumns;
}header;
struct{
struct _column* columns;
int nColumns;
}details;
struct{
struct _column* columns;
int nColumns;
}end;
};
struct _column headerColumns [] = {
{
"a",
1
},
{
"ab",
2
}
};
struct _column detailColumns[] = {
{
"b",
2
},
{
"bc",
3
},
};
struct _column endColumns [] = {
{
"c",
3
},
{
"cd",
4
}
};
struct test_struct _test = {
{ headerColumns, sizeof(headerColumns)/sizeof(headerColumns[0])},
{ detailColumns, sizeof(detailColumns)/sizeof(detailColumns[0])},
{ endColumns, sizeof(endColumns)/sizeof(endColumns[0])}
};