使用 sscanf 将 char* 转换为 SYSTEMTIME

标签 c winapi

通过在网站中找到的示例,我尝试将 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/

相关文章:

c++ - 如何初始化句柄

c++ - 使用 wineg++/winelib 编译 C++ 程序的问题

c++ - 2 名游戏玩家之间的行为不一致

c++ - PRINTDLG 结构在不同进程的 hWnd 上使用

c - 获取当前目录时函数的结果是 "garbage"?

c - Ubuntu,POSIX mq_receive 在应该的时候没有阻塞

c - 从文本文件中读取和打印输出

c - 关于 C 中 unsigned char * 的奇怪问题

c - 求数组平均值的函数

c++ - 什么可以防止异常被捕获?