我想在C中获取当前时间(没有当前日期)。主要问题是当我想要使用函数时。当我不使用它们时,evertyhing就好了。任何人都可以告诉我,为什么我的代码只显示一个小时? (看一下附图)。提前谢谢。
#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;
}
答案 0 :(得分:7)
sizeof(str_time)
为您提供char*
的大小。您希望缓冲区str_time
的大小指向。尝试
strftime(str_time, 100, "%H:%M:%S", tm);
// ^ size of buffer allocated for str_time
其他小问题 - 您应该包含<stdlib.h>
来获取malloc
的定义,并在free(t)
打印其内容后main
。
答案 1 :(得分:4)
sizeof
运算符返回变量str_time
的长度,该变量是char的指针。它不会返回动态数组的长度。
将sizeof(str_time)
替换为100
,一切正常。
答案 2 :(得分:0)
试试这个......
int main ()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "Current local time and date: %s", asctime (timeinfo) );
return 0;
}
答案 3 :(得分:0)
使用此概念获取系统时间并更新它。多年前我在我的项目中使用过它。你可以根据你的要求改变它。
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();
}
这是一个复杂的代码,但如果您理解它,那么它将解决您的所有问题。
享受:)
答案 4 :(得分:0)
在抽出时间时,你可以试试这个:
#include <stdio.h>
int main(void)
{
printf("Time: %s\n", __TIME__);
return 0;
}
结果:
时间:10:49:49