通过网站上的示例,我试图将char *转换为SYSTEMTIME结构:
(12 * (1/24)) + (33 * (1/(24*60)))
它适用于所有st成员但是st.wMonth:它没有收到任何价值。怎么了?
感谢您的帮助!
答案 0 :(得分:2)
结构SYSTEMTIME包含类型为WORD
的成员。这是一个16位无符号整数。
您的代码正在传递这些成员的地址并将它们转换为int *。这是未定义的行为。
According to Microsoft,WORD被定义为无符号短语
这意味着scanf()的正确说明符为%hu
,并且应删除强制转换。
答案 1 :(得分:1)
摆脱类型转换,他们错了。 SYSTEMTIME
使用WORD
作为其字段。 WORD
是unsigned short
的typedef,因此您可以使用%hu
代替%d
:
sscanf(dateHeure, "%hu/%hu/%hu %hu:%hu:%hu",
&st.wDay, &st.wMonth, &st.wYear,
&st.wHour, &st.wMinute, &st.wSecond);