【发布时间】:2016-08-06 16:56:32
【问题描述】:
我在 gcc(x64) 上编译了下面的代码。
为什么我可以通过 dot(people[0].name) 而不是 '->' 来访问结构项?
people[0] 不是指向结构的地址,我应该使用 people[0]->name 或 (*people[0]).name 来访问名称吗?
代码:
#include <stdio.h>
#define TOTAL 4
int main(void) {
typedef struct tagPerson {
char name[12];
int ID;
} Person;
#define LPPERSON Person*
Person * people = calloc(sizeof(Person), TOTAL);
strncpy(people[0].name, "Henry", 12);
strncpy(people[1].name, "Jacob", 12);
printf("sizeof(people)=%d\n", sizeof(people));
printf("people[0].name=%s\n", people[0].name);
printf("sizeof(people[0])=%d\n", sizeof(people[0]));
printf("people[1].name=%s\n", people[1].name);
printf("sizeof(people[1])=%d\n", sizeof(people[1]));
free(people);
return 0;
}
输出:
sizeof(people)=8
people[0].name=Henry
sizeof(people[0])=16
people[1].name=Jacob
sizeof(people[1])=16
【问题讨论】:
-
您已将调用中的参数切换为
calloc。 -
不是calloc只返回一个指向分配内存最低字节的指针吗?
-
您使用
strncpy()是危险的。 (嗯,每次使用 strncpy() 都是危险的......)