使用网站中的示例,我试图将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除外:它不接收任何值。怎么了?
谢谢你的帮助!
发布于 2016-02-18 21:00:43
结构SYSTEMTIME包含类型为WORD的成员。这是一个16位的无符号整数。
您的代码将这些成员的地址传递给int*。这是未定义的行为。
据微软称,WORD被定义为无符号的短消息。
这意味着scanf()的正确说明符是%hu,应该删除强制转换。
发布于 2016-02-18 22:36:12
摆脱类型转换,它们是错误的。SYSTEMTIME使用WORD作为其字段。WORD是unsigned short的类型类型,所以您可以使用%hu而不是%d
sscanf(dateHeure, "%hu/%hu/%hu %hu:%hu:%hu",
&st.wDay, &st.wMonth, &st.wYear,
&st.wHour, &st.wMinute, &st.wSecond);https://stackoverflow.com/questions/35492243
复制相似问题