结构类型数组。在结构内部有指针
Array of structure type. with pointer inside of structure
我遗漏了一些东西,可能很愚蠢,但我已经没有想法了,我需要一些帮助。
#include <stdio.h>
#include <stdlib.h>
typedef struct person{
char name[10];
int *age;
} PERSON;
int main(){
int i, n;
scanf("%d", &n);
PERSON *arr = (PERSON*)calloc(n, sizeof(PERSON));
for(i = 0; i < n; i++){
gets(arr[i].name);
// scanf("%d", arr[i].age);
}
for(i = 0; i < n; i++){
printf("%s", arr[i].name);
// printf("%d", arr[i]->age));
}
return 0;
}
因此,我无法输入或读取任何结构的 age。
我需要一个人的动态数组,在每个人中,我也需要一个新的动态数组(这是原始代码的简化版本,但错误是相同的)。
我已经评论了我最后的尝试,所以你可以看到我是如何尝试的。
我得到的错误是 [Error] invalid type argument of '->' (have 'PERSON')
。
因为age
是一个不指向任何内存的指针。您必须分配内存并使 int*
指向它,或者更改结构定义以包含 int
。否则,您只是将不确定的指针值传递给 scanf
- 这是未定义的行为。你可以这样做
arr[i].age = malloc(sizeof *arr[i].age);
if(!arr[i].age){
perror("malloc");
exit(EXIT_FAILURE);
}
然后在scanf
中使用它。 scanf("%d",arr[i].age);
打印出来
printf("%d\n",*arr[i].age);
更自然的解决方案是
typedef struct person{
char name[10];
int age;
} PERSON;
并相应地使用它。然后它会像
scanf("%d",&arr[i].age);
和
printf("%d\n",arr[i].age);
稍微澄清一下错误:
arr[i]->age
\----/
这是一个 PERSON
结构实例,您在其上应用 ->
,这就是错误的原因。
检查malloc
、scanf
等的return值。这将帮助您检测可能发生的错误情况。 gets
已弃用。请改用 fgets
。
我遗漏了一些东西,可能很愚蠢,但我已经没有想法了,我需要一些帮助。
#include <stdio.h>
#include <stdlib.h>
typedef struct person{
char name[10];
int *age;
} PERSON;
int main(){
int i, n;
scanf("%d", &n);
PERSON *arr = (PERSON*)calloc(n, sizeof(PERSON));
for(i = 0; i < n; i++){
gets(arr[i].name);
// scanf("%d", arr[i].age);
}
for(i = 0; i < n; i++){
printf("%s", arr[i].name);
// printf("%d", arr[i]->age));
}
return 0;
}
因此,我无法输入或读取任何结构的 age。 我需要一个人的动态数组,在每个人中,我也需要一个新的动态数组(这是原始代码的简化版本,但错误是相同的)。
我已经评论了我最后的尝试,所以你可以看到我是如何尝试的。
我得到的错误是 [Error] invalid type argument of '->' (have 'PERSON')
。
因为age
是一个不指向任何内存的指针。您必须分配内存并使 int*
指向它,或者更改结构定义以包含 int
。否则,您只是将不确定的指针值传递给 scanf
- 这是未定义的行为。你可以这样做
arr[i].age = malloc(sizeof *arr[i].age);
if(!arr[i].age){
perror("malloc");
exit(EXIT_FAILURE);
}
然后在scanf
中使用它。 scanf("%d",arr[i].age);
打印出来
printf("%d\n",*arr[i].age);
更自然的解决方案是
typedef struct person{
char name[10];
int age;
} PERSON;
并相应地使用它。然后它会像
scanf("%d",&arr[i].age);
和
printf("%d\n",arr[i].age);
稍微澄清一下错误:
arr[i]->age
\----/
这是一个 PERSON
结构实例,您在其上应用 ->
,这就是错误的原因。
检查malloc
、scanf
等的return值。这将帮助您检测可能发生的错误情况。 gets
已弃用。请改用 fgets
。