【问题标题】:Strftime issue in class or function类或函数中的Strftime问题
【发布时间】:2019-03-08 02:12:34
【问题描述】:

我在main上写了这段代码,它工作得很好,但是当我试图把它放在函数或类方法中时,它不起作用,为什么? 同样,当我调试此代码时,似乎没有编译 time_t 和 struct tmp。

const char*  getFormat()  { 
        time_t rawtime;
        struct tm * timeinfo;
        char buffer[80];

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

        strftime(buffer, sizeof(buffer), "%d.%m.%Y H%:%i", timeinfo);
        return buffer;
}

【问题讨论】:

  • 如果这段代码自己运行良好,那么导致问题的函数或类在哪里?如果没有完整的上下文,我们无法为您提供帮助。
  • @Yucel_K 在函数中此代码不起作用,但是当您在主上提取代码时,它可以工作
  • 不要发布有效的代码,发布无效的代码。
  • 你返回一个指向局部变量buffer的指针。 buffer 在函数退出后立即变为无效,因此在调用函数中不能指望它。而是考虑在调用函数中声明缓冲区并将其传递给getFormat
  • Recap:返回指向在调用者可以使用时超出范围的局部变量的指针。两个拼写错误:H% -> %H%i -> %I 修复这些错误,你的函数应该可以工作了。

标签: c++ strftime ctime


【解决方案1】:

您可能想要使用std::put_time,而不是使用strftime。它采用相同的格式字符串,因此写出当前时间类似于:

time_t rawtime = std::time(nullptr);
tm *timeinfo = std::localtime(&rawtime);

std::cout << std::put_time(timeinfo, "%d.%m.%Y %H:%I") << "\n";

这是在 C++11 中添加的,所以它已经被广泛使用了一段时间。

【讨论】:

    【解决方案2】:

    好吧,只是总结一下其他评论者所说的话(编辑:并正确地完成工作),这段代码可以正常工作:

    #include <time.h>
    #include <string>
    #include <iostream>
    
    std::string getFormat ()
    { 
        time_t rawtime;
        time(&rawtime);
        struct tm *timeinfo = localtime(&rawtime);
        char buffer [80];
        strftime(buffer, sizeof (buffer), "%d.%m.%Y %H:%I", timeinfo);
        return std::string (buffer);
    }
    
    int main ()
    {
        std::string s = getFormat ();
        std::cout << s << "\n";
    }
    

    输出:

    03.10.2018 20:08
    

    Live demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-14
      • 2011-01-19
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多