通过指针在结构内写入数据

writing data inside a structure via pointer

提问人:Ma7071 提问时间:7/26/2023 更新时间:7/27/2023 访问量:63

问:

我已经定义了一个结构并通过 malloc 在内存中分配了必要的空间,我想在结构中写入数据,在这种情况下,有人可以帮我了解 scanf 函数的语法吗?

我认为当我创建一个 malloc 时,变量在地址内,所以我认为我可以通过在内存中移动来导航结构 显然我错了;

struct airplanesType
{
    char TractionType[15];
    int superficeAlare;
    int peso;
    int coefficenteDiCarico;
    int rendimento;
    int cordaMedia;
    int distanzaCPCG;
    int distanzaCGCoda;
    int distanzaDragTraction;
    int MaxTraction;
    int ClMax;
    int CDclmax;
};

typedef struct airplanesType aereo;

结构;

    aereo *cesna= malloc(sizeof(aereo));

我如何称呼 malloc

c struct malloc scanf

评论

0赞 machine_1 7/26/2023
使用成员访问运算符为成员赋值。(例如,我不完全理解你的问题。->structcesna->superficeAlare = 1;

答:

0赞 0___________ 7/26/2023 #1
  1. 尽可能使用不键入的对象。sizeof
aereo *cesna= malloc(sizeof(*cesna));
  1. ->取消引用结构指针。

在这种情况下,有人可以帮我了解 scanf 函数的语法吗?

scanf("%d", &cesna -> cordaMedia);

您还可以使用(*cesna).cordaMedia

scanf("%d", &(*cesna).cordaMedia);
0赞 Per Ekström 7/27/2023 #2

我想在结构中写入数据,有人可以帮我吗 在这种情况下,scanf 函数的语法?

如前所述,每当使用结构时,请使用 or 运算符直接访问结构中的字段。您可以使用直接内存操作,但这样做要困难得多,会导致代码更加混乱,并且非常容易出错。.->

在这种特殊情况下,您可以使用 来访问该字段,就像使用任何其他变量一样,并使用 来访问该字段。pesocesna->pesoclMaxcesna->clMax

然而。。。

scanf 函数

无论谁教过你这个功能,都会对你造成很大的伤害。这个函数不仅已经过时了,除非你确切地知道该怎么做,否则你很可能会在代码中引入内存泄漏。有关详细信息,请参阅此问题。scanf

scanf 的缺点

广泛建议您查看系统调用或查找如何通过命令行和 + 函数向程序发送参数。两者都是您武器库中的有用工具。有关此主题的更多信息:fgets()argcargv

https://c-for-dummies.com/blog/?p=3379

http://crasseux.com/books/ctutorial/argc-and-argv.html

Argc+Argv 确实需要您从命令行启动程序,但对于与 Linux 世界中的其他工具集成非常有用。

需要明确的是,教初学者是件好事,这样他们就不需要担心字符串到数字的转换和缓冲区溢出之类的事情,只是为了编写一个询问和显示你的年龄的程序,但是一旦你了解了什么是字符串以及如何在 C 中使用它......为了你自己的理智,你应该放弃。scanfscanf