所以我基本上有一个带有名字的结构,必须是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);
}
答案 0 :(得分:2)
people
函数正文中未定义 readData
变量。
这就是编译器失败的原因。
您可以将变量传递给函数person *readData(person *people)
。
不要忘记在readData();
函数中将readData(people);
更改为main
。
如果只需要一维数组,请不要将指针符号与数组符号混合使用。
使用person people[1000];
代替person *people[1000];
答案 1 :(得分:0)
您的函数readData不了解您的人员阵列。如果你按照以下几行重写它:
void readData(person** people) {
your code
}
void main() {
person* people[100];
readData(people);
}
应该会更好。
请参阅zavgs答案,了解更多需要改进的地方。