1

これは私のコードです:

    int main() 
{
    time_t time1, time2;
    struct tm *timeinfo1, *timeinfo2;
    char *time1str, *time2str;


    time1 = 3600;
    time2 = 3720;

    // here i must insert function from time.h

    ///////////////////////////
    timeinfo1 = localtime(&time1);// here
    localtime(&time2);

    time1str = new char [strlen(asctime(timeinfo1)) + 2];
    strcpy(time1str, asctime(timeinfo1));
    timeinfo2 = localtime(&time2);
    time2str = asctime(timeinfo2);
    puts(time1str);
    puts(time2str);
    getchar();
    return 0;
}

内部バッファを設定するためにスラッシュコメントの間に挿入できる関数はありますか? このバッファは以前の値を消去します。

4

2 に答える 2

2

はいあります。あなたが探しているのは、 : の再入可能バージョンlocaltime()ですlocaltime_r()localtime()静的バッファではなく、引数として指定したバッファに結果を書き込む点を除いて、 とまったく同じように機能します。プロトタイプは次のとおりです。

 struct tm *
 localtime_r(const time_t *clock, struct tm *result);

アプリケーションでの使用法は次のようになります。

struct tm timeinfo1, timeinfo2;
...
localtime_r(&time1, &timeinfo1);
localtime_r(&time2, &timeinfo2);
于 2013-10-26T07:12:41.780 に答える
2

質問に C のみのタグを付けたので。C99を含むCではそのような機能はありませんでした。C11には、オプションの境界チェック拡張機能localtime_sの一部である関数が含まれるようになりました。

struct tm *localtime_s(const time_t * restrict timer, struct tm * restrict result);

残念ながら、その拡張機能を実装しているプラ​​ットフォームはまだ多くありません。

POSIX には、localtime_rまったく同じインターフェイスと同様のセマンティクスを持つ関数があります。この種のシステムをキャプチャして移植性を維持するには、次のようなことができます

#ifdef _XOPEN_SOURCE
# define localtime_s localtime_r
#endif

localtime_sまたは、提供することになっている追加の保証に近づけたい場合

#ifdef _XOPEN_SOURCE
struct tm *localtime_s(const time_t * restrict timer, struct tm * restrict result) {
   return (timer && result ? localtime_r(timer, result) : 0);
}
#endif
于 2013-10-26T07:33:28.860 に答える