以下のコードをgcc(x64)でコンパイルしました。ポインタを使って構造体のメンバにアクセスする
「 - >」ではなく、ドット(people [0] .name)を入れて構造アイテムにアクセスするのはなぜですか?
people [0]は構造体のアドレスを指していないので、people [0] - > nameまたは(* people [0])。
コード:
#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
あなたはhttp://en.cppreference.com/([ 'calloc']に呼び出しの引数を切り替えていますw/c /メモリ/ calloc)。 –
callocは、割り当てられたメモリの最下位バイトへのポインタのみを返しますか? – graceshirts
'strncpy()'の使用は危険です。 (よく、* strncpy()の使用はすべて危険です...) – wildplasser