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程序?

c - XOR 在 C 中如何工作以找到出现奇数次的数字?

c - 在 C 语言中,通用容器还是安全容器?

c++ - 如何使用 L(或不使用)在变量中传递 unicode 字符串

c++ - 在VxWorks中关闭无响应设备文件端口的正确方法是什么?

c - 这个宏是什么意思#define div_ac_power(y,x) *y/x

c - 这个 C 代码会泄漏内存吗?

c - getchar 和 putchar

c - 使用 qsort 排序后存储原始索引

c - 如何让 MinGW 交叉编译器使用与 gcc 相同的库?