我有一个结构,如下
typedef struct _someStruct
{
int V1;
char V2[10];
} SomeStruct;
SomeStruct *struct;
int elemNo = FillStruct(&struct);
for (i=0; i<elemNo; i++)
PrintElem(&struct[i]);
PrintElem功能如下:
void PrintElem(SomeStruct *s)
{
printf("ntV1 : %dntV2 : %sn", s->V1, s->V2);
}
代码在来自2'n或3'rd元素的循环中失败。
有什么建议吗?
编辑:事实上,PrintElem是(我这样做的原因是,真正的结构有大约30个长名称字段,所以我这样做是为了让代码可读):
void PrintElem(SomeStruct *s)
{
printf(
"ntV1 : %d"
"ntV2 : %sn",
s->V1, s->V2);
}
我不认为这会有什么不同,但它确实有(实际上是问题的关键——见下面我自己的答案)我只是寄希望它以后能帮助到别人。
感谢所有人的建议和您的时间
这个有一些问题,但让我们试着解决
typedef struct _someStruct
{
int V1;
char V2[10];
} SomeStruct;
/* assuming you create an array of pointers to structures allocated from heap
and then return the data to the struct1 double pointer */
SomeStruct ** struct1;
int elemNo = FillStruct(struct1);
for (i=0; i<elemNo; i++)
PrintElem(struct[i]);
void PrintElem(SomeStruct *s)
{
printf("ntV1 : %dntV2 : %sn", s->V1, s->v2);
}
希望这会有所帮助,如果你能澄清FillStruct,那会有所帮助。
struct _someStruct
{
int V1;
char V2[10];
};
_someStruct *struct;
int elemNo = FillStruct(&struct);
for (i=0; i<elemNo; i++)
PrintElem(&struct[i]);
void PrintElem(_someStruct *s)
{
printf("ntV1 : %dntV2 : %sn", s->V1, s->v2);
}
还要确保在FillStruct中分配_someStruct类型的数组,而不仅仅是一个元素。否则,这一点也不奇怪。
从这些行:
SomeStruct *struct;
int elemNo = FillStruct(&struct);
我假设您希望FillStruct
函数也为这些结构分配内存。您的问题很可能出现在该函数的主体中(您分配的内存块太小或返回的值不正确)。
FillStruct
函数可能如下所示:
int FillStruct(SomeStruct **s)
{
*s = malloc( sizeof(SomeStruct) * 10 );
// fill members of these structs
return 10;
}
还要注意,struct
是一个关键字,不能将其用作变量的名称。
PrintElem的正确形式应该是
void PrintElem(SomeStruct *s)
{
printf(
"ntV1 : %d"
"ntV2 : %sn",
s->V1, s->V2);
}
感谢大家的帮助