我有一个结构如下
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("\n\tV1 : %d\n\tV2 : %s\n", s->V1, s->V2);
}
代码在2'n或3'rd元素的循环中失败。
关于什么是错的任何建议?
修改 实际上PrintElem是(我用这种方式做的事实是真正的结构有大约30个具有长名称的字段,所以我用它来使代码可读):
void PrintElem(SomeStruct *s)
{
printf(
"\n\tV1 : %d"
"\n\tV2 : %s\n",
s->V1, s->V2);
}
我没想到这会有所作为,但确实如此(实际上是问题的关键 - 请参阅下面我自己的答案) 我发布它希望以后可以帮助别人。
感谢大家的所有建议和时间
答案 0 :(得分:2)
这个有一些问题,但让我们试着解决它们
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("\n\tV1 : %d\n\tV2 : %s\n", s->V1, s->v2);
}
希望如果您能澄清FillStruct,这会有所帮助。
答案 1 :(得分:1)
实际上SomeStruct是变量的名称而不是类型。我建议你将typedef和variable定义拆分为两行:
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("\n\tV1 : %d\n\tV2 : %s\n", s->V1, s->v2);
}
还要确保在FillStruct中分配一个类型为_someStruct的数组,而不仅仅是一个元素。否则这一点都不会奇怪。
答案 2 :(得分:1)
从以下几行:
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
是关键字,您不能将其用作变量名称。
答案 3 :(得分:0)
PrintElem的正确形式应该是
void PrintElem(SomeStruct *s)
{
printf(
"\n\tV1 : %d"\
"\n\tV2 : %s\n",
s->V1, s->V2);
}
谢谢大家的帮助