gpt4 book ai didi

c - 使用 typedef 构建结构 - C

转载 作者:行者123 更新时间:2023-11-30 16:08:30 24 4
gpt4 key购买 nike

如何在 C 中使用 typedef 在另一个 struct 中正确使用一个 struct

这个方法不起作用,我不明白为什么:

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

typedef struct
{
char *nume;
char *prenume;
data data;
} student;

typedef struct
{
int an,zi,luna;
} data;

int main()
{
student Andrei;

scanf("%s %s %d ",Andrei.nume,Andrei.prenume,&Andrei.b.an);
printf("%s %s %d ",Andrei.nume,Andrei.prenume,Andrei.data.an);

return 0;
}

最佳答案

您的代码中实际上存在许多错误!

首先,您需要声明/定义任何 struct 将其用作另一个 struct 的成员之前的对象.

第二,你的numeprenume成员被声明为指向字符的指针,但它们未初始化任何内容,也没有为这些字符串分配任何内存。

第三,您的scanf中有一个“错字”。线路:Andrei.b.an据推测应该是 Andrei.data.an .

最后(我认为),因为 scanf 的格式字符串中有一个尾随空格。 ,该函数至少需要一个“额外”输入字段才能完成。

这是一个潜在的“修复”,在我进行更改的地方添加了注释:

#include <stdio.h>
// <stdlib.h> // You don't use this - perhaps thinking of using "malloc" for "nume" and "prenume"??

typedef struct // This MUST be defined BEFORE it is used as a member in the following struct!
{
int an, zi, luna;
}data;

typedef struct
{
char nume[32]; // Here, we create fixed char arrays (strings) for "nume"...
char prenume[32]; // ... and "prenume". You can change the sizes, as you need!
data data;
} student;

int main()
{
student Andrei;
scanf("%s %s %d", Andrei.nume, Andrei.prenume, &Andrei.data.an); // Note: removed trailing space from format!
printf("%s %s %d", Andrei.nume, Andrei.prenume, Andrei.data.an);
return 0;
}

关于c - 使用 typedef 构建结构 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59336393/

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