【发布时间】:2014-01-09 11:44:53
【问题描述】:
所以我基本上有一个带有名称的结构,它必须是动态的,以及一个 ID。我认为它可以是这样的。
typedef struct {
char *name;
unsigned int id;
} person;
现在我将使用给定的 start 编写一个函数:
person *readData();
结构和名称都必须是动态的,我想用 malloc 函数来做到这一点。对于所有人,也应该有一个数组,我们将其命名为“people[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 在函数中说,“人”必须是联合或结构类型。 有什么快速输入吗?这只是基本的 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) 对于main()函数是本地的,因此如果您不传递它(或使其成为全局),readData()就不可能知道它。您可能不是指person *readData(),而是void readData(person* people)。不过,您的代码也包含许多其他问题。
标签: c