我在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
它打印每个元素的年龄,但不打印任何其他元素。我一直在努力解决这个问题,并且不知道为什么会这样。谢谢您的帮助; 这是我的代码:
答案 0 :(得分:1)
首先,请将作业标记为作业。
其次,正如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)
来获得正确的分配。