std :: put_time()的问题

时间:2013-03-15 19:33:49

标签: c++ visual-c++ c++11 chrono

您好我有一个非常简单的测试用例,可以在visual studio 2012下编译。但是它会产生运行时故障。产生此故障的行将被复制,就像它们在cppreference.com上一样,在很多与时间功能相关的示例中。 带有示例的页面就像这样http://en.cppreference.com/w/cpp/chrono/c/localtime

#include <fstream>
#include <iomanip>
#include <time.h>
#include <stdio.h>
#include <chrono>
#include <string>

using namespace std;

ofstream & GetTimeStr(ofstream & ofs)
    {
    time_t rawTime = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());

    // fails on this line, very deep inside the runtime code.
    ofs << std::put_time(std::localtime(&rawTime), "%c %Z");
    return ofs;
    }

int main()
    {
    std::ofstream ofs;
    ofs.open("Logger.txt");

    if (ofs.good())
        {
        ofs << "some text " << GetTimeStr(ofs) << " more text ";   
        }
    }

为了保持这篇文章的清洁,我把堆栈跟踪放在这里 http://ideone.com/WaeQcf

1 个答案:

答案 0 :(得分:4)

我猜这是VC运行时中的一个错误,它是由%Z中使用strftime触发的(由std::put_time调用):

http://connect.microsoft.com/VisualStudio/feedback/details/759720/vs2012-strftime-crash-with-z-formatting-code

不幸的是,它似乎不是微软的高优先级错误。