【发布时间】:2023-03-18 13:11:01
【问题描述】:
我正在研究将输入时间戳格式化为输入格式的函数。
std::string 1stformat = "dd - MM - yyyy HH 'Hours' mm 'Minutes' ss 'Seconds' SSS 'Miliseconds –' a '– Time Zone: ' Z '-' zzzz";//will not print anything
std::string 2ndformat = "'This took about' h 'minutes and' s 'seconds.'";//will print out
格式化后
char date_string[100];
strftime(date_string, 50, format.c_str(), curr_tm);
我的问题是有时输入格式太长导致缓冲区date_string 不足以容纳内容。过去 3 周我才刚刚接触 C++,所以我对此没有太多了解。
【问题讨论】:
-
不幸的是,
strftime()不像snprintf()那样返回如果足够长的话将写入目标的字符数。您必须检查它的返回值并在需要时分配一个更大的字符串,然后重试并重复,直到它足够长。 -
C++20 将有 std::chrono::format()... 如果您使用的是最新的编译器,那可能已经可用。
-
很遗憾我只能使用 C++14
-
我可以检查
format字符串的长度,但我无法定义char date_string[format.length];。