bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

C語言ctime()函數調用出現的返回值異常問題-創新互聯

起因:操作系統實驗要求寫一個文件管理系統,要求輸出一個文件的創建時間,修改時間和上次訪問時間。在文件的結構體中創建了三個time_t類型變量用于保存時間的值,需要輸出時調用ctime()函數格式化輸出,遇到了一些問題記錄一下。

創新互聯建站主營平陸網站建設的網絡公司,主營網站建設方案,重慶App定制開發,平陸h5小程序定制開發搭建,平陸網站營銷推廣歡迎平陸等地區企業咨詢問題一:

調用ctime()后結尾自動換行。

問題復現:

time_t ptime;
    time(&ptime);
    char *s = ctime(&ptime);
    printf("%s\n", s);

輸出結果:

最后一行多了一個換行符,保險起見講字符串每個字符轉為成ASCII碼打印出來:

time_t ptime;
    time(&ptime);
    char *s = ctime(&ptime);
    // printf("%s\n", s);
    for (int i = 0; i< strlen(s); i++)
    {
        printf("%d ", *(s + i));
    }
    printf("\n");

結尾是10,多了一個換行符無疑,這個問題倒是好解決:

time_t ptime;
    time(&ptime);
    char *s = ctime(&ptime);
    *(s + strlen(s) - 1) = 0;
    printf("%s\n", s);

再次輸出:

結尾的換行符去掉了,問題解決

問題二:

問題復現:

char *dt1, *dt2, *dt3;
    time_t ptime;
    time(&ptime);
    dt1 = ctime(&ptime);
    dt2 = ctime(&ptime);
    dt3 = ctime(&ptime);
    *(dt1 + strlen(dt1) - 1) = 0;
    *(dt2 + strlen(dt2) - 1) = 0;
    *(dt3 + strlen(dt3) - 1) = 0;
    printf("%s\n%s\n%s\n", dt1, dt2, dt3);

結果:

不僅最后的換行符沒了,連標準化輸出的最后幾個字符也沒了。

于是用gcc一調試:

三個指針指向了同一個地址,所以用上述方法去掉結尾換行符的時候相當于把最后3個字節全改成了0,2022\n變成了20\0\0\0。

明明調用了三次ctime(),但是每一次指向的是同一個地址,很迷,然后繼續調,看ctime()函數的實現:

static __inline char *__CRTDECL ctime(const time_t *_Time) { return _ctime64(_Time); }

返回值是是一個指針,這個_ctime64()不知道是什么,上微軟官網一查:

看到了這么一段話,總結就是ctime()和gmtime(),localtime()共享一個靜態緩存區,每一次調用都會覆蓋掉之前的值。那也就是說,在代碼中的三個指針指向的是同一個地址,每次修改都是對同一片內存進行修改,修改了三次,所以才會導致輸出異常。

解決方法:

char *dt1, *dt2, *dt3;
    time_t ptime;
    time(&ptime);
    dt1 = (char *)malloc(25 * sizeof(char));
    dt2 = (char *)malloc(25 * sizeof(char));
    dt3 = (char *)malloc(25 * sizeof(char));
    strcpy(dt1, ctime(&ptime));
    strcpy(dt2, ctime(&ptime));
    strcpy(dt3, ctime(&ptime));
    *(dt1 + strlen(dt1) - 1) = 0;
    *(dt2 + strlen(dt2) - 1) = 0;
    *(dt3 + strlen(dt3) - 1) = 0;
    printf("%s\n%s\n%s\n", dt1, dt2, dt3);

給三個指針分配一個自己的空間然后把值復制過去,問題就解決了:

輸出正常。

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

本文標題:C語言ctime()函數調用出現的返回值異常問題-創新互聯
網頁鏈接:http://vcdvsql.cn/article2/hohic.html

成都網站建設公司_創新互聯,為您提供外貿建站自適應網站網站設計公司網站內鏈響應式網站微信小程序

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設