参数中使用Struct类型数据时参数函数C中未知类型的结构

时间:2017-12-08 00:00:28

标签: c pointers

如何使用参数将struct类型数据传递给另一个函数?我已经创建了global struct,但我想我已经错过了一些东西

#include <stdio.h>
#include <stdlib.h>

struct Stuff
{
    int id;
    String name[20];
}

// call another function
int myFunctionInsert(Stuff *stuff);

int main()
{
    struct Stuff *stuff[20];
    myFunctionInsert(*stuff);
}

int myFunctionInsert(Stuff *stuff)
{
    int x;
    for(x = 0; x < 25; x++){
        stuff[x].id = x;
        stuff[x].name = 'stuff';
    }
}

所以我的目的是当我已经调用myFunctionInsert时,struct数据与我在该函数中输入的数据相同。

例如,当我打电话给myFunctionShow(我没有写入)时,数据显示应该是这样的

id   : 1
name : stuff

// until 25

当我尝试上面的代码时,我收到了错误

  

未知的类型名称&#39; Stuff&#39; (在第i行中称为myFunctionInsert(Stuff *stuff)

任何帮助将不胜感激

感谢

2 个答案:

答案 0 :(得分:3)

您定义的类型为pip3而不是struct Stuff。因此:

Stuff

或者使用// call another function int myFunctionInsert(struct Stuff *stuff);

typedef

答案 1 :(得分:2)

问题不仅在于缺少typedef。 由于for(x = 0; x < 25; x++){越过

的边界,内存也会被粉碎
struct Stuff *stuff[20];

stuff[x].name = 'stuff';也不会飞。你的意思是“东西”。请注意,C语言中没有String类型。

指定传递的结构数组大小的程序的工作版本可能如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

    typedef struct stuff
    {
        int id;
        char name[20];
    }Stuff;

    // call another function
    int myFunctionInsert(Stuff *stuff, int len);

    int myFunctionInsert(Stuff *stuff,int len)
    {
        int x;
        for(x = 0; x < len; x++){
            stuff[x].id = x;
            strcpy( stuff[x].name, "stuff");

            printf("stuff %i id=%d  name=%s\n", x, stuff[x].id, stuff[x].name );
        }
    }

    int main()
    {
        Stuff sf[25];
        myFunctionInsert(sf,5); // init 5 structures
        return 0;
    }

输出:

stuff 0 id=0  name=stuff
stuff 1 id=1  name=stuff
stuff 2 id=2  name=stuff
stuff 3 id=3  name=stuff
stuff 4 id=4  name=stuff