2015-09-13 35 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})));