使用sscanf将char *转换为SYSTEMTIME

时间:2016-02-18 20:56:17

标签: c winapi

通过网站上的示例,我试图将char *转换为SYSTEMTIME结构:

(12 * (1/24)) + (33 * (1/(24*60)))

它适用于所有st成员但是st.wMonth:它没有收到任何价值。怎么了?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

结构SYSTEMTIME包含类型为WORD的成员。这是一个16位无符号整数。

您的代码正在传递这些成员的地址并将它们转换为int *。这是未定义的行为。

According to Microsoft,WORD被定义为无符号短语 这意味着scanf()的正确说明符为%hu,并且应删除强制转换。

答案 1 :(得分:1)

摆脱类型转换,他们错了。 SYSTEMTIME使用WORD作为其字段。 WORDunsigned short的typedef,因此您可以使用%hu代替%d

sscanf(dateHeure, "%hu/%hu/%hu %hu:%hu:%hu",
    &st.wDay, &st.wMonth, &st.wYear,
    &st.wHour, &st.wMinute, &st.wSecond);