簡體   English   中英

是否有來自time.h的任何設置內部緩沖區的函數

[英]Is there any function from time.h that sets internal buffer

這是我的代碼:

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

是否有任何函數可以在斜杠注釋之間插入以設置內部緩沖區。 此緩沖區擦除我之前的值。

就在這里。 您正在尋找的是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);

由於您僅使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM