gpt4 book ai didi

c - 在 C 中将 malloc 与结构一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:26 25 4
gpt4 key购买 nike

所以,这是我的代码:

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>

struct person{
char name[18];
int age;
float weight;
};

int main()
{
struct person *personPtr=NULL, person1, person2;
personPtr=(struct person*)malloc(sizeof*(struct person));
assert (personPtr!=NULL);
personPtr = &person1; // Referencing pointer to memory address of person1

strcpy (person2.name, "Antony"); //chose a name for the second person
person2.age=22; //The age of the second person
person2.weight=21.5; //The weight of the second person


printf("Enter a name: ");
personPtr.name=getchar(); //Here we chose a name for the first person

printf("Enter integer: ");
scanf("%d",&(*personPtr).age); //Here we chose the age of the first person

printf("Enter number: ");
scanf("%f",&(*personPtr).weight); //Here we chose the weithgt of the first person

printf("Displaying: "); //Display the list of persons
printf("\n %s, %d , %.2f ", (*personPtr).name, (*personPtr).age,(*personPtr).weight); //first person displayed
printf("\n %s, %d , %.2f",person2.name, person2.age, person2.weight); //second person displayed
free(personPtr);
return 0;
}

我收到两个错误,我不知道为什么。首先,我认为我没有正确分配内存,第一个错误在下一行:

personPtr=(struct person*)malloc(sizeof*(struct person));

它说:

[Error] expected expression before ')' token

我得到的第二个错误在线上

personPtr.name=getchar();

为什么我不能使用 getchar 为结构分配名称?错误是:

[Error] request for member 'name' in something not a structure or union

最佳答案

sizeof*(struct person) 是语法错误。编译器将其视为尝试将 sizeof 运算符应用于 *(struct person)。由于您不能取消引用类型,因此编译器会提示。我认为您打算编写以下内容:

personPtr = malloc(sizeof *personPtr);

这是分配 personPtr 指向的任何内容的惯用方式。现在只在定义指针的地方指定类型,这是一件好事。您也不需要转换 malloc 的结果,因为 void* 可以隐式转换为任何指针类型。

第二个错误是双重的:

  1. name 是固定大小的数组。您不能使用赋值运算符对数组进行赋值。您只能分配给每个单独的元素。

  2. getchar 返回单个字符,而不是您所期望的字符串。要读取字符串,可以使用 scanf("%17s", personPtr->name)。 17 是缓冲区的大小 - 1,以防止 scanf 向字符串添加 NUL 终止符时缓冲区溢出。

关于c - 在 C 中将 malloc 与结构一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41736888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com