【发布时间】:2018-04-09 10:44:05
【问题描述】:
我的 C 程序具有全局声明的时间函数,如下所示:
time_t t = time(NULL);
struct tm *tm = localtime(&t);
time(&rawtime);
void file_name()
{
sprintf(buffer,"data/log_%d.%d_%d:%d:%d",tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
char *p = buffer;
for(;*p;++p)
{
if(*p == ' ')
*p = '_';
}
printf("%s",buffer);
}
}
void create_file()
{
file_name();
fptr = fopen(buffer,"w");
}
void read_data();
{
.
.
.
.
sprintf(buffer1,"_%d:%d:%d",tm->tm_hour,tm->tm_min,tm_sec);
fprintf(fptr,"%d.%d_%d:%d:%d,%d",tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
close_file();
}
int main()
{
read_data();
.
.
return 0;
}
因为我想在另外两个函数中使用tm,比如一个是filename();以及类似的另一个名为 read_data() 的函数;在打印月份、日期等的程序中。我想在全球范围内声明这些。但是当我编译程序时,它给出了一个错误,称为初始化元素在time_t t = time(NULL); 和struct tm *tm = localtime(&t); 不是恒定的,任何人都可以帮助我提前谢谢。
【问题讨论】:
-
time_t t; int main(void) { t = time(NULL); } -
请提供minimal reproducible example。这不是一个有效的 C 程序。
-
仍然不是 mcve,也不是有效的 C。请查看您的初学者教科书以了解语言基础知识。另请阅读How to Ask 并说明您认为需要这样做的原因。
-
C 标准规定 “具有静态或线程存储持续时间的对象的初始化程序中的所有表达式都应为常量表达式或字符串文字。” 您尝试使用初始化函数调用,这不是两个选项之一。所以没办法。
-
我可以知道如何在主函数中初始化它们吗?
标签: c global-variables time.h