c-将数组元素(结构)传递给函数



我有一个结构,如下

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,那会有所帮助。

事实上,SomeStruct是变量的名称,而不是类型。我建议您将typedef和变量定义分为两行:
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);
}

感谢大家的帮助

最新更新