c - 结构函数不适用于我的数组

标签 c

所以我基本上有一个带有名称的结构,它必须是动态的,还有一个 ID。我认为它可以看起来像这样。

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

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

person *readData();

结构和名称都必须是动态的,我想用 malloc 函数来做到这一点。对于所有人,也应该有一个数组,我们将其命名为“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)
{
    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);

}

最佳答案

people 变量在您的 readData 函数体中未定义。 这就是编译器因错误而失败的原因。

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

  2. 如果您只需要一维数组,请不要将指针表示法与数组表示法混合使用。 使用 person people[1000]; 而不是 person *people[1000];

关于c - 结构函数不适用于我的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21019291/

相关文章:

c - C语言中位域的实际用途是什么?

c - 使用 mmap() 如何创建动态大小的结构

c - 以延迟取消结束 pthread

c - 指针游戏数组不知道如何将指针向后移动

c++ - 结构 ifreq : different definition in "linux/if.h" and man page

c - 为什么 Visual Studio 不知道这个结构的正确定义?

c - 如何用 C 语言运行一个程序 x 分钟?

c++ - 显示 c/c++ 中可用的系统错误

C 将字符读取为二进制

c - bsearch 对按降序排序的数组