sizeof*(struct person)
是语法错误.编译器将其视为尝试应用sizeof
运算符*(struct person)
.由于您无法取消引用某个类型,因此编译器会抱怨.我想你打算写下面的内容:
personPtr = malloc(sizeof *personPtr);
这是分配personPtr
指向的任何东西的惯用方式.现在只在指定定义的位置指定类型,这是一件好事.您也不需要转换结果malloc
,因为它void*
可以隐式转换为任何指针类型.
第二个错误是双重的:
name
是一个固定大小的数组.您无法使用赋值运算符分配给数组.您只能分配给每个单独的元素.
getchar
返回单个字符,而不是您期望的字符串.要读取字符串,您可以使用scanf("%17s", personPtr->name)
.17是缓冲区的大小 - 1,当scanf在字符串中添加NUL终结符时,防止缓冲区溢出.