gpt4 book ai didi

c - 使用 strtok、strlen、malloc 和 fgets 根据内容动态分配数组。 C程序

转载 作者:行者123 更新时间:2023-11-30 19:23:06 25 4
gpt4 key购买 nike

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .




9年前关闭。




我必须阅读带有学生名字和姓氏的文本文件。根据扭曲的程序要求,名字和姓氏是字符指针。
使用 fgets 读取每一行。
因此,我在数组结构中有变量 char *last_name, char *first_name。

例如:

比尔·克林顿

威廉,盖茨

我需要在运行时通过使用 strlen 和 strtok 指针来分配它们的大小......

问题是,如果我使用 strtok 和 strlen 来找出名称的长度,原来的 data_line 已经被分解了!
有谁知道如何做到这一点?

最佳答案

您已经拥有了所有需要命名的主要功能,因此您一切顺利。

名称是 char 指针是有道理的。 C 中没有字符串类型,只有字符数组。此外——这令人困惑——数组和指针在 C 中是相关的。它们并不相同,但在许多情况下它们的行为相同。考虑一个需要 char 指针参数的函数可以接受 char 指针或数组名称(没有索引)。另外,请注意,具有索引的数组实际上只是取消引用指向某个地址的指针,索引指示偏移量。

因此,如果您想要一个动态大小的字符串,您将不得不将其声明为 char 指针并为它动态分配内存(即 malloc)。在您的情况下,每个名字和姓氏的大小都不同——每个名字都有一个指针——所以你需要一个 malloc 用于每个名字。使用 strlen() 仍然是合适的,就像使用带有多个分隔符的 strtok() 一样。

您可能想查看 strtok() 的示例——它可以(并且将)一次返回每个 token 。 This link在问题和解释性答案之间有一个很好的例子。

编辑:更具体地说,这是您在代码中提出的问题的核心:

获取 token :

token = strtok(data_line, sep);  // First token on data_line

要么:
token = strtok(NULL, sep); // Subsequent tokens on data_line

然后,分配内存和存储名字的示例(姓氏完全类似):
person[i].first_name = malloc(strlen(token) + 1);
strcpy(person[i].first_name, token);

strlen() 结果中加一的值是为空终止符腾出空间。

编辑 2:而不是使用 malloc() 和 strcpy(), strdup()两者都完成,并且会更可取。

关于c - 使用 strtok、strlen、malloc 和 fgets 根据内容动态分配数组。 C程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13665669/

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