通过在网站中找到的示例,我尝试将 char* 转换为 SYSTEMTIME 结构:
SYSTEMTIME st;
char *dateHeure = (char*)calloc(30,1);
strcpy(dateHeure, "18/02/2016 15:02:05");
sscanf(dateHeure, "%d/%d/%d %d:%d:%d", (int*)&st.wDay, (int*)&st.wMonth, (int*)&st.wYear, (int*)&st.wHour, (int*)&st.wMinute, (int*)&st.wSecond);
它适用于所有 st 成员,但 st.wMonth :它不接收任何值。怎么了?
感谢您的帮助!
最佳答案
结构体SYSTEMTIME包含类型为WORD
的成员。这是一个 16 位无符号整数。
您的代码正在传递这些成员的地址并将它们转换为 int*。这是未定义的行为。
According to Microsoft , WORD 被定义为无符号短整型。
这意味着 scanf() 的正确说明符是 %hu
,并且应该删除强制转换。
关于使用 sscanf 将 char* 转换为 SYSTEMTIME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35492243/