在linux env中,我有一些如下代码:
std::string SecondsToDate10String(time_t seconds) {
struct tm* t = localtime(&seconds);
char buffer[100] = {'\0'};
auto n = std::strftime(buffer, 10, "%Y%m%d%H", t);
std::cout << "buffer => {" << buffer << "}" << std::endl;
std::cout << "n => " << n << std::endl;
return std::string(std::begin(buffer), std::begin(buffer) + 10);
}
当秒= 1531903802
输出是:
buffer => {20180718}
n => 0
我认为缓冲区应该是2018071816。 为什么?
答案 0 :(得分:1)
您正在尝试写超出限制的字符(在您的代码中为10个字符)
std:strftime
的 1531903802
输出为2018071817
。
这就是为什么您的n
为0的原因。
返回值
写入str指向的字符数组的字节数 不包括成功时终止的'\ 0'。 如果达到计数 在存储整个字符串之前,返回``0''并 内容未定义。