gpt4 book ai didi

c - 努力从 C 中的结构中打印值

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

我在使用 C 语言的结构时遇到了一些麻烦。我认为问题出在指针上。这是我的程序应该做的事情;读取一个输入数据,比如这样;

Name: Hello
Gender: Male
Age: 60

Name: Hello1
Gender: Male
Age: 13

Name: Hello2
Gender: Female
Age: 10

Name: Hello3
Gender: Male
Age: 20

我希望程序读取“:”后面的单词,例如 Hello 并将该值放入一个结构。因此,结构的索引[1]应该包含 hello,male,60,例如。

当我在 while 循环内打印值时,它打印得很好。但是当我尝试在 while 循环之外打印结构的值时,它不起作用。我得到这个作为输出;

¿6Q ¿6Q  60
↑ 13
æ £ 10
§☺ ☺ 20

它打印每个元素的年龄,但不打印其他任何元素的年龄。我为此苦苦挣扎了一段时间,不知道为什么会这样。感谢您的帮助;这是我的代码:

最佳答案

首先,请将作业标记为作业。

其次,正如 Lister 先生所指出的,您将变量 line 分配为 80 个字符长,但您从文件中读取最多 100 个字符 - 对于长行,这会导致问题。您读取的字符数不得超过 79 个字符(在末尾的 \0 处保留 1 个字符)。

现在关于“打印”,我认为您的问题在于以下几行:

p[nameIndex].name = (char*)malloc(sizeof(line));
p[nameIndex].gender = (char*)malloc(sizeof(line));
p[nameIndex].age = (char*)malloc(sizeof(line));

由于 line 本质上是 char *,因此 sizeof(line) 不会给您期望的结果。相反,您应该使用 strlen 函数 - 不是在这里,而是在复制数据的地方。您的代码应如下所示:

switch(i)
{
case 1:
p[nameIndex].name = (char*)malloc(strlen(tmp) + 1);
strcpy(p[nameIndex].name, temp);
break;
case 2:
p[nameIndex].gender = (char*)malloc(strlen(tmp) + 1);
strcpy(p[nameIndex].gender, temp);
break;
case 3:
p[nameIndex].age = (char*)malloc(strlen(tmp) + 1);
strcpy(p[nameIndex].age, temp);
break;
default:
break;
}

当然,这是假设每个字符占用 1 个字节的存储空间。否则,您应该使用 (strlen(tmp) + 1) * sizeof(char) 来获得正确的分配。

关于c - 努力从 C 中的结构中打印值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521529/

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