我发布了关于12天前将std :: chrono :: time_point转换为字符串并解决问题的问题。我要感谢你。
我使用以下代码解决了我的问题:
char no[15];
string test;
chrono::system_clock::time_point now = chrono::system_clock::now();
time_t now_c = chrono::system_clock::to_time_t(now);
strftime(no, sizeof(no), "%Y%m%d%I%M%S", localtime(&now_c));
test = no;
cout << test <<endl;
但是,我不喜欢这段代码,因为我不想使用数组。我想用这样的内存分配来解决我的问题;
char* no = new char();
string test;
chrono::system_clock::time_point now = chrono::system_clock::now();
time_t now_c = chrono::system_clock::to_time_t(now);
strftime(no, sizeof(no), "%Y%m%d%I%M%S", localtime(&now_c));
test = no;
cout << test <<endl;
delete[]no;
不幸的是这段代码不起作用。我认为有一种方法可以做到这一点,但我不知道如何。
如果有人选择我的错误或给我一个建议,我将非常感激。
感谢,
c00012
答案 0 :(得分:1)
正如评论中所指出的,你对原始代码中固定常数(15)的依赖是脆弱的;使用常量在堆上分配内存不会使它不那么脆弱(事实上,你在额外的代码中写了一个bug)。
如果您要分配内存,请让标准库更安全地为您执行此操作:
#include <ctime>
#include <chrono>
#include <sstream>
...
const auto now{std::chrono::system_clock::now()};
const auto now_{std::chrono::system_clock::to_time_t(now)};
// A stream into which to write it.
std::stringstream ss;
ss << std::put_time(std::localtime(&now_), "%Y-%m-%d %X");
您的字符串现在应该可以通过ss.str()
获得。