0

从文件中读取信息并打印出来。我将修改时间从statint调用保存mod_time到结构中以供稍后调用。但是,当我想使用该ctime()函数时,我遇到了一个问题,因为它需要一个time_t*类型变量。我尝试使用类型转换,但这只是导致了段错误。任何帮助将非常感激。

void print(struct file_info **array)
{
    int i;
    for (i = 0; array[i] != NULL; i++)
    {
            printf("%s\n", array[i]->name);
            printf("mod_time: %s\n", ctime((time_t*)array[i]->mod_time));
    }
}

以上是类型转换的示例,它产生了段错误。原来的只是排除了(time_t*)类型转换,这导致了“没有转换”的警告。

4

3 回答 3

2

由于ctime函数需要一个指向 的指针time_t,我认为 的数据time_t必须在内存中,而不仅仅是在表达式中。

time_t在内存上制作数据的示例:

void print(struct file_info **array)
{
    int i;
    for (i = 0; array[i] != NULL; i++)
    {
            time_t tmp = (time_t)array[i]->mod_time; /* I'm not sure if this works */
            printf("%s\n", array[i]->name);
            printf("mod_time: %s\n", ctime(&tmp));
    }
}
于 2015-09-13T05:42:20.550 回答
2

使用显式强制转换ctime((time_t*)array[i]->mod_time)是不正确的。您正在接受int并将其转换为指针。出现分段错误并不奇怪。

最好使用time_tformod_time而不是int.

如果您没有该选项,则可以使用:

time_t t = array[i]->mod_time;
printf("mod_time: %s\n", ctime(&t));
于 2015-09-13T05:42:30.983 回答
0

假设 POSIX/C99 或更高版本,您可以使用复合:

printf("mod_time: %s\n", ctime(&((time_t){array[i]->mod_time})));
于 2015-09-13T07:42:27.133 回答