为使此代码正常运行,必须使用memset。为什么呢?
struct tm temp;
memset(&temp, 0, sizeof(struct tm));
strptime(str.c_str(), "%d-%m-%Y", &temp);
为什么这还不够?
struct tm temp;
strptime(str.c_str(), "%d-%m-%Y", &temp);
非常感谢。
答案 0 :(得分:0)
由于strptime
specification中有这个小片段(我的重点是):
适当的tm
结构成员的值设置为与语言环境信息相对应的值。
换句话说,它不一定设置tm
结构的 all 字段,因此您首先将所有内容初始化为零。否则,作为局部变量,在解析时间字符串之前(以及之后,除非您明确地解析适当的项目),它可能在所有字段中都有任意信息。
之所以这样做(跳过您未明确解析的字段)的原因之一是因为您可能已经设置了tm
,并且只想更改某些字段(例如,使用time()
和localtime()
获取今天的tm
,然后解析5pm以获取今天的特定时间。
很有可能,如果您只想查看解析的字段,则不必担心先清零。但是可能还会有 possibility ,谁写了您的strptime
实现的人“太聪明了”,并决定他们可以对数据进行后期处理以解决问题。例如,如果您将26:00:00
作为时间,并且解析了March 1
的日期,则可能会将其调整为March 2, 02:00:00
。
我并不是说这是有可能的(甚至是规范所允许的),但考虑到事前将结构归零的最低成本,我可能宁愿选择安全的方法。特别是因为那里有很多人是“太聪明了”:-)