无法将值放在由指针和 malloc 启动的结构中

问题描述 投票:0回答:1

只是一个名为 person 的简单结构,在里面我需要存储姓名和年龄。我正在尝试为我的结构动态分配内存。

不使用指针:

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

typedef struct person
{
    char name[10];
    int age;
} person;

int main(int argc, char *argv[])
{
    person a = {"bob", 15};    // Here, we can input values "together", all at once
    printf("name is %s, age is %i\n", a.name, a.age);

    return 0;
}

到这里,就可以成功打印出:

name is bob, age is 15

使用指针:

int main(int argc, char *argv[])
{
    person *a = (person *) malloc(sizeof(person));
    *a = {"bob", 15};    // Here I tried to input the all values
    printf("name is %s, age is %i\n", a->name, a->age);

    free(a);

    return 0;
}

它不会编译并返回错误:

expected expression before '{' token

好吧,如果我尝试一一输入值:

int main(int argc, char *argv[])
{
    person *a = (person *) malloc(sizeof(person));
    a->name = "bob";
    a->age = 15;
    printf("name is %s, age is %i\n", a->name, a->age);

    free(a);

    return 0;
}

可以成功打印出:

name is bob, age is 15

我期望由于指针指向分配给结构体 person 的内存,因此可以像普通结构体一样一起输入值。但正如你所看到的,它不能。然而,当值被一一输入时,它就起作用了。

我做错了什么吗?或者使用指针时,需要一一输入值?谢谢。

c pointers struct malloc
1个回答
0
投票

您可能需要一个结构体文字。并且不要投射来自

malloc
的返回。

int main(void)
{
    person *a = malloc(sizeof(person));
    *a = (person){"bob", 15};    // Here I tried to input the all values
    printf("name is %s, age is %i\n", a->name, a->age);

    free(a);

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.