将数组元素(struct)传递给函数

时间:2012-02-16 19:03:30

标签: c pointers struct

我有一个结构如下

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);
}

我没想到这会有所作为,但确实如此(实际上是问题的关键 - 请参阅下面我自己的答案) 我发布它希望以后可以帮助别人。

感谢大家的所有建议和时间

4 个答案:

答案 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);
}

谢谢大家的帮助