如何正确使用指针结构?

时间:2014-01-31 22:21:39

标签: c file pointers struct

在执行此代码时,我对指针感到困惑:

typedef struct Times{
    char time[100];
}Time;

Time *ptTimes(int tam, FILE *caminho){
    Time *times;
    times = (Time *)malloc((tam)*(sizeof(Time)));

    int i = 0;
    while(i < tam){
        fscanf(caminho, " %[^;];", (times->time));
        i++;
    }

    i=0;
    while (i < tam){
        printf("%s", times->time);
        times++;
        i++;
    }

    return(times);
}

函数*ptTimes应该返回Time结构指针。我打算做的是创建一个名为*times的结构指针,然后指向由malloc分配的其他几个结构。我试图通过分配的空格并存储文件中的字符串time[100]tam是程序应该读取的字符数,它是从main函数发送的参数。另外,我试图在屏幕上打印结构与printf存储的内容。 / p>

我知道我做错了,printf在屏幕上显示的唯一内容是文件列表中的最后一个字符串。

以下是.txt文件的示例:

Team1;
Team2;
Team3;
Team4;

我愿意接受建议或想法。我需要在此代码中使用结构。

2 个答案:

答案 0 :(得分:1)

编辑:从指针数组切换到对象数组。

这行代码将始终写入'times'中的第一个元素,无论'i'的值如何:

fscanf(caminho, " %[^;];", (times->time));

相当于这一行:

fscanf(caminho, " %[^;];", (times[0].time));

这可能是你想要的:

fscanf(caminho, " %[^;];", (times[i].time));

你还需要摆脱'times ++'系列。时间指针应该继续指向它分配的内存,直到你释放它为止。

答案 1 :(得分:0)

times->time更改为times[i].time,并在第二次循环结束时删除times++