0

ファイルから情報を読み取り、それらを印刷します。後で呼び出すために、変更時間を構造体に呼び出されたものstatとして保存します。ただし、関数を使用したい場合、型変数を使用するため、問題が発生します。タイプキャストを使用してみましたが、セグフォルトが発生しました。どんな助けでも大歓迎です。intmod_timectime()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_tforを使用することをお勧めします。mod_timeint

そのオプションがない場合は、次を使用できます。

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