2

UNIX エポック時間から文字配列への変換に問題があります。私はそれを行う方法を知っており、変換は正しく行われていますが、gmtime() または localtime() を呼び出した後、すべての入力にランダムな文字が追加されます。私は問題を突き止めましたが、 localtime() または gmtime() のいずれかを呼び出す行のみがこの問題を引き起こします(真剣に...それらを入れて問題が発生し、それらをコメントアウトしてリメイクすると、問題は発生しなくなりました)。関数が呼び出される関数は次のとおりです。

void ls(){

int clusterSize = bootRecord[0];
int root = bootRecord[2];

for (int i = 0; i < bootRecord[0] / 128 ; ++i){
    fseek(fp, clusterSize * root + 128 * i, SEEK_SET);
    if(directoryTable[i].name[0] != 0x00){

        time_t rawtime = (time_t)directoryTable[i].creation;
        struct tm * curDate;

        curDate = localtime(&rawtime);

        printf("%s     %d      %s", directoryTable[i].name, directoryTable[i].size,
                        asctime(gmtime(&rawtime)));

    }
}
}

現在、私は asctime(gmtime(&rawtime)) を持っていますが、それらをいくつかの異なるステートメントに分けようとしましたが、役に立ちませんでした。localtime() または gmtime() に代わる便利な方法を知っている人はいますか? または、この特定の問題の解決策をたまたま知っていますか? ありがとうございました。

4

1 に答える 1

1

問題が何であれ、時間関数の使用方法とは無関係です。次のプログラムは正常に動作します。

#include <stdio.h>
#include <time.h>

int main (void) {
    time_t now = time(0);
    printf ("Local time is %s", asctime (localtime (&now)));
    printf ("  UTC time is %s", asctime (gmtime (&now)));
    return 0;
}

印刷:

Local time is Thu Feb 16 14:15:51 2012
  UTC time is Thu Feb 16 06:15:51 2012

予想通り。

意味をもっと明確に述べる必要がありますall input gets random characters appended to to。入力した行に不思議なことに文字が追加されているように見える場合、それはほぼ確実にの問題であり、たまたま関数呼び出しによって悪化しています。

私は最初に(例として)オーバーフローしている可能性のあるバッファ、またはヌルターミネータを転送しないコードロジックを探します。

于 2012-02-16T06:14:42.343 に答える