挣扎于C中结构的印刷值

时间:2012-03-01 18:06:32

标签: c structure

我在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

它打印每个元素的年龄,但不打印任何其他元素。我一直在努力解决这个问题,并且不知道为什么会这样。谢谢您的帮助; 这是我的代码:

1 个答案:

答案 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)来获得正确的分配。