gpt4 book ai didi

c++ - 如何在不使用数组的情况下将 chrono::time_point 转换为字符串?

转载 作者:行者123 更新时间:2023-11-28 05:51:45 32 4
gpt4 key购买 nike

我在 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

最佳答案

如评论中所述,您对原始代码中固定常量 (15) 的依赖是脆弱的;您使用常量在堆上分配内存并不会降低它的脆弱性(实际上,您在额外的代码中写了一个错误)。

如果您要分配内存,让标准库更安全地为您做:

#include <chrono>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <sstream>

int main()
{
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 %I:%M:%S %p");

// Your string should now be obtainable via ss.str()
std::cout << ss.str();
return 0;
}

关于c++ - 如何在不使用数组的情况下将 chrono::time_point 转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114956/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com