strftime%F在Windows上不起作用

时间:2014-09-08 14:14:52

标签: c++ linux windows visual-studio-2008 cygwin

我试图在Windows上编译这个简单的例子。当我使用%F这是%Y-%m-%d的较长形式的快捷方式时,进程将中止而不显示任何错误消息。在Linux上,它在this live example shows on ideone.com中工作正常。有什么想法吗?

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

int main ()
{
   time_t rawtime;
   struct tm * timeinfo;
   char buffer [80];

   time (&rawtime);
   timeinfo = localtime (&rawtime);

   strftime (buffer,80,"Now it's %F.",timeinfo);
   puts (buffer);

   return 0;
}

1 个答案:

答案 0 :(得分:7)

%F是C99,请参阅strftime on man7或自行比较C99和C90标准。

VS2013库中的

strftime和早期版本不符合C99,因为它们不接受格式说明符:MSDN VS2013 strftime page
也许下一个版本会添加它,因为格式还没有用于其他任何东西......

只需使用它直接的快捷方式,即符合C89和VS2013的格式:%Y-%m-%d

引用从C标准传递给strftime的无效格式说明符会发生什么:

  

6如果转换说明符不是上述之一,则行为未定义。