【发布时间】:2018-09-25 16:26:38
【问题描述】:
所以我需要专门使用 struct tm 来打印我的生日,我成功地做到了。但是,我还需要使用 strftime() 以不同的格式打印它。 这就是我遇到问题的地方,因为 strftime() 只能识别指针参数。
#include <stdio.h>
#include <time.h>
int main(){
struct tm str_bday;
time_t time_bday;
char buffer[15];
str_bday.tm_year = 1994 - 1900 ;
str_bday.tm_mon = 7 - 1;
str_bday.tm_mday = 30;
str_bday.tm_hour = 12;
str_bday.tm_min = 53;
time_bday = mktime(&str_bday);
if(time_bday == (time_t)-1)
fprintf(stdout,"error\n");
else
{
fprintf(stdout,"My birthday in second is: %ld \n",time_bday);
fprintf(stdout,"My birthday is: %s\n", ctime(&time_bday));//Wed July 22 12:53:00 1998
strftime(buffer,15,"%d/%m/%Y",time_bday);
fprintf(stdout,"My birthday in D/M/Y format is %s",buffer);
}
return 0;
}
错误是:
Error: passing argument 4 of ‘strftime’ makes pointer from integer without a cast
expected ‘const struct tm * restrict’ but argument is of type ‘time_t’
谁能告诉我如何解决它?
编辑:将 time_bday 更改为 &str_bday 有效!但是现在程序每次运行时都会输出随机时间和日期。
编辑:我使用了 puts(buffer),而不是 strftime() 之后的 fprintf(),并且效果很好。另外,将缓冲区 [15] 更改为缓冲区 [30],因为我有小时、分钟和秒。
【问题讨论】:
-
好吧,既然它需要一个
struct tm*,您是否尝试过将一个指向struct tm的指针传递给它?尝试传递&str_bday而不是time_bday。 -
@FelixGuo 哦,是的,谢谢!但是现在,每次我运行这个程序时,它都会显示不同的日期和时间
-
不确定为什么会得到不一致的结果(使用哪个输出)?但是,您并没有设置
str_bday的所有字段。您可以尝试使用 C99 样式的语法const struct tm str_bday = { .tm_year = 98, .tm_mon = 7, /* ... */ };进行设置,或者如果这对ctime()工作来说足够正确,您可以从gmtime()获得往返转换。 -
我相信你的实际生日是完全不同的日期。不建议在互联网上发布您的真实信息(尽管在关于 SO 的问题中包含更糟糕的信息)。