c++ - MSVC 上的 ctime_r

标签 c++ visual-studio-2010 visual-c++

我有这个函数,如果我使用g++,它会编译得很好。问题是我必须使用Windows编译器,并且它没有ctime_r。我对 C/C++ 有点陌生。谁能帮我用 MSVC cl.exe 完成这项工作?

功能:

void leaveWorld(const WorldDescription& desc)
{
    std::ostringstream os;
    const time_t current_date(time(0));
    char current_date_string[27];
    const size_t n = strlen(ctime_r(&current_date,current_date_string));
    if (n) {
        current_date_string[n-1] = '\0'; // remove the ending \n
    } else {
        current_date_string[0] = '\0'; // just in case...
    }
    os << totaltime;
    (*_o) << "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" << endl;
    (*_o) << "<testsuite name=\"" << desc.worldName() << "\" ";
    (*_o) << "date=\"" << current_date_string;
    (*_o) << "\" tests=\"" << ntests
          << "\" errors=\"" << nerror
          << "\" failures=\"" << nfail
          << "\" time=\"" << os.str().c_str() << "\" >";
    _o->endl(*_o);
    (*_o) << _os->str().c_str();
    _os->clear();
    (*_o) << "</testsuite>" << endl;
    _o->flush();
}

最佳答案

在MS库中,有一个ctime_s ,它允许与 Linux/Unix 操作系统中的 ctime_r 相同的“不使用全局”功能。您可能必须像这样包装它:

const char *my_ctime_r(char *buffer, size_t bufsize, time_t cur_time)
{
#if WINDOWS
    errno_t e = ctime_s(buffer, bufsize, cur_time);
    assert(e == 0 && "Huh? ctime_s returned an error");
    return buffer;
#else 
    const char *res = ctime_r(buffer, cur_time);
    assert(res != NULL && "ctime_r failed...");
    return res;
#endif
}

关于c++ - MSVC 上的 ctime_r,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35750940/

相关文章:

c++ - 将C++中的 vector 元组包装为元组

c++ - VC++ LNK2019 错误我似乎无法修复

c++ - stdafx.h 到头文件

C++,关于使用指针复制字符数组的奇怪行为

visual-studio-2010 - Windows 服务安装项目

vb.net - VB.NET中的持续时间

unit-testing - 如何为遗留的 Visual C++ 代码组织单元测试工具?

c++ - 某些用户的 OpenProcess 访问被拒绝

c++ - C++11 标准是否保证零值有符号整数的一元减为零?

c++ - 如何使用 Glib(或任何其他库)列出目录中的所有文件?