2015-09-13 32 views
0

读取从文件中的信息,并打印出来。我拯救stat修改时间称为intmod_time成一个struct后来回忆。然而,当我想用​​ctime()功能,我遇到一个问题,因为这需要一个time_t*类型变量。我尝试使用一个类型转换,但这只是导致了seg错误。任何帮助将非常感激。INT到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)); 
    } 
} 

以上是typecast的例子,它产生了seg错误。原始的一个排除了(time_t*)类型转换,导致了“没有演员”警告。

+0

我不介意节省时间作为'time_t';令我困扰的是不得不将它保存为一个指针,因为那时我必须处理一个三重指针行,而且我已经不知所措了,因为它已经足够删除我现在拥有的两个指针了。如果我把它保存为一个普通的'time_t',我怎么把它变成一个指针来供'ctime()'使用? – jiccan

+0

我想你可以简单地使用'&'操作符从变量中获取指针。例如:'&array [i] - > mod_time' – MikeCAT

回答

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)); 
    } 
} 
2

ctime((time_t*)array[i]->mod_time)使用显式类型转换是不正确的。您正在拍摄int并将其投射到指针。你得到分段错误并不奇怪。

使用time_t替代mod_time而不是int会更好。

如果你没有这样的选择,你可以使用:

time_t t = array[i]->mod_time; 
printf("mod_time: %s\n", ctime(&t)); 
0

假设POSIX/C99以上,你可以使用的化合物:

printf("mod_time: %s\n", ctime(&((time_t){array[i]->mod_time})));