Struct函数不适用于我的数组

时间:2014-01-09 11:44:54

标签: c

所以我基本上有一个带有名字的结构,必须是dinamically和一个ID。我认为它看起来像这样。

typedef struct {
char *name;
unsigned int id;
} person;

现在我将用给定的开始写一个函数:

person *readData();

结构和名称都必须是dinamically,我想用malloc函数做到这一点。对于所有人,也应该有一个数组,我们将其命名为“人[1000]”。

以下是我使用main函数尝试上述函数:

int count = 0;

person *readData() {
    int i, len;
    char puffer[1000];

    printf("Name: ");
    scanf_s("%999s", &puffer);

    len = strlen(puffer);
    people[count].name = (char *)malloc((len + 1)*sizeof(char));

    for (i = 0; i < len; i++)
        people[count].name[i] = puffer[i];

    people[count].name[len] = '\0';
}

void main(void)
{
    person *people[1000];
    readData();
    printf("\n%s\n", people[count].name);
}

好吧,它似乎没有这样的方式。 Visual Studio在函数中说,“people”必须是union或struct类型。 有什么快速输入?这是基本的C,因为我开始学习它。

编辑:完整代码:

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

typedef struct {
char *name;
unsigned int id;

} person;

person people[1000];

int count = 0;

person *readData() {
int i, len;
char puffer[1000];
printf("Name: ");
scanf_s("%999s", &puffer);
len = strlen(puffer);
people[count].name = (char *)malloc((len + 1)*sizeof(char));
for (i = 0; i < len; i++)
    people[count].name[i] = puffer[i];
people[count].name[len] = '\0';


}

void main(void){
readData();
printf("\n%s\n", people[count].name);

}

2 个答案:

答案 0 :(得分:2)

您的people函数正文中未定义

readData变量。 这就是编译器失败的原因。

  1. 您可以将变量传递给函数person *readData(person *people)。 不要忘记在readData();函数中将readData(people);更改为main

  2. 如果只需要一维数组,请不要将指针符号与数组符号混合使用。 使用person people[1000];代替person *people[1000];

答案 1 :(得分:0)

您的函数readData不了解您的人员阵列。如果你按照以下几行重写它:

void readData(person** people) {
    your code
}

void main() {
   person* people[100];
   readData(people);
}

应该会更好。

请参阅zavgs答案,了解更多需要改进的地方。