2013-04-11 135 views
1

我想在C中獲得當前時間(不包括當前日期)。主要問題是當我想用函數來完成時。當我不使用它們時,evertyhing就很好。有人可以告訴我,爲什麼我的代碼只顯示一個小時? (看看附圖)。提前致謝。以C獲取當前時間,功能

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

char* get_time_string() 
{ 
    struct tm *tm; 
    time_t t; 
    char *str_time = (char *) malloc(100*sizeof(char)); 
    t = time(NULL); 
    tm = localtime(&t); 
    strftime(str_time, sizeof(str_time), "%H:%M:%S", tm); 
    return str_time; 
} 

int main(int argc, char **argv) 
{ 
    char *t = get_time_string(); 
    printf("%s\n", t); 
    return 0; 
} 

enter image description here

+3

提示:檢查什麼'sizeof(str_time)'返回。 – Joulukuusi 2013-04-11 09:08:28

+2

不要忘記當你完成它時釋放你的字符串...... – Alnitak 2013-04-11 09:14:09

+1

在不同的註釋中,1)'sizeof(char)== 1'根據定義,你應該刪除乘法,2)你沒有檢查分配是否成功。 – 2013-04-11 09:16:02

回答

4

sizeof操作者返回變量str_time的長度,該長度爲char一個指針。它不會返回動態數組的長度。

替換通過100它會很好。

+0

謝謝,工作!:) – yak 2013-04-11 09:11:33

+0

接受答案然後:) – 2013-04-11 09:12:56

+1

'sizeof'不是一個函數。這是一個運營商。 – 2013-04-11 10:28:42

6

給你的尺寸爲char*。你想要緩衝區大小的str_time來代替。嘗試

strftime(str_time, 100, "%H:%M:%S", tm); 
//    ^size of buffer allocated for str_time 

其他小點 - 在main打印的內容後,你應該包括<stdlib.h>回暖的malloc定義和應該free(t)

1

試試這個...

int main() 
{ 
    time_t rawtime; 
    struct tm * timeinfo; 

    time (&rawtime); 
    timeinfo = localtime (&rawtime); 
    printf ("Current local time and date: %s", asctime (timeinfo)); 

    return 0; 
} 
+0

它不是一個功能... – yak 2013-04-11 09:12:36

+0

@yak:只需用這個替換你的主...它應該工作 – 2013-04-11 09:14:09

1

運用這種概念獲取系統時間和更新它。多年前我已經在我的項目中使用了它。您可以根據您的要求進行更改。

updtime()     /* FUNCTION FOR UPDATION OF TIME */ 
{ 
struct time tt; 
char str[3]; 
gettime(&tt); 
itoa(tt.ti_hour,str,10); 
setfillstyle(1,7); 
bar(getmaxx()-70,getmaxy()-18,getmaxx()-30,getmaxy()-10); 
setcolor(0); 
outtextxy(getmaxx()-70,getmaxy()-18,str); 
outtextxy(getmaxx()-55,getmaxy()-18,":"); 
itoa(tt.ti_min,str,10); 
outtextxy(getmaxx()-45,getmaxy()-18,str); 
return(0); 
} 
The previous function will update time whenever you will call it like 

and this will give you time 

int temp; 
struct time tt; 
gettime(&tt);      /*Get current time*/ 
temp = tt.ti_min; 

如果您想更新時間,您可以使用下面的代碼。

gettime(&tt); 
    if(tt.ti_min != temp) /*Check for any time update */ 
    { 
    temp = tt.ti_min; 
    updtime(); 
    } 

這是複雜的代碼,但如果你理解它,那麼它將解決你所有的問題。

享受:)

1

在得到的時候,你可以試試這個:

#include <stdio.h> 

int main(void) 
{ 
    printf("Time: %s\n", __TIME__); 
    return 0; 
} 

結果:

時間:十點49分49秒