一个时间格式的字符串转为SYSTEMTIME的奇怪问题

starytx 2021-03-08 02:25:49
CString str("2021-03-08 14:19:30:245");
SYSTEMTIME st;
sscanf(str, "%04u-%02u-%02u %02u:%02u:%02u.%03u", &st.wYear,%st.wMonth, &st.wDay,&st.wHour,&st.wMinute,&st.wSecond,&st.wMilliseconds);


上边这段代码跑起来有问题,必须如果放在一个对话框的OnInitDialog里的话,对话框显示不出来。
最后的毫秒数得专门定义一个变量来接收,然后再赋值给st结构中的毫秒才可以,不知道为啥会这样?
...全文
340 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2021-03-08
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
赵4老师 2021-03-08
  • 打赏
  • 举报
回复
对,是要用%hu
//typedef struct _SYSTEMTIME {
//  WORD wYear;
//  WORD wMonth;
//  WORD wDayOfWeek;
//  WORD wDay;
//  WORD wHour;
//  WORD wMinute;
//  WORD wSecond;
//  WORD wMilliseconds;
//} SYSTEMTIME;

CString str(
"2021"  //wYear
"-03"   //wMonth
"-08"   //wDay
" 14"   //wHour
":19"   //wMinute
":30"   //wSecond
".245"  //wMilliseconds
);
SYSTEMTIME st;
if (7!=sscanf(str,
    "%4hu"   //wYear
    "-%2hu"  //wMonth
    "-%2hu"  //wDay
    " %2hu"  //wHour
    ":%2hu"  //wMinute
    ":%2hu"  //wSecond
    ".%3hu", //wMilliseconds
    &st.wYear,
    &st.wMonth,
    &st.wDay,
    &st.wHour,
    &st.wMinute,
    &st.wSecond,
    &st.wMilliseconds)) {
    printf(
        "YYYY"  //wYear
        "-MM"   //wMonth
        "-DD"   //wDay
        " hh"   //wHour
        ":mm"   //wMinute
        ":ss"   //wSecond
        ".mss"  //wMilliseconds
        " format sscanf fail in str[%s]\n",str);
}
赵4老师 2021-03-08
  • 打赏
  • 举报
回复
//typedef struct _SYSTEMTIME {
//  WORD wYear;
//  WORD wMonth;
//  WORD wDayOfWeek;
//  WORD wDay;
//  WORD wHour;
//  WORD wMinute;
//  WORD wSecond;
//  WORD wMilliseconds;
//} SYSTEMTIME;

CString str(
"2021"  //wYear
"-03"   //wMonth
"-08"   //wDay
" 14"   //wHour
":19"   //wMinute
":30"   //wSecond
".245"  //wMilliseconds
);
SYSTEMTIME st;
if (7!=sscanf(str,
    "%4u"   //wYear
    "-%2u"  //wMonth
    "-%2u"  //wDay
    " %2u"  //wHour
    ":%2u"  //wMinute
    ":%2u"  //wSecond
    ".%3u", //wMilliseconds
    &st.wYear,
    &st.wMonth,
    &st.wDay,
    &st.wHour,
    &st.wMinute,
    &st.wSecond,
    &st.wMilliseconds)) {
    printf(
        "YYYY"  //wYear
        "-MM"   //wMonth
        "-DD"   //wDay
        " hh"   //wHour
        ":mm"   //wMinute
        ":ss"   //wSecond
        ".mss"  //wMilliseconds
        " format sscanf fail in str[%s]\n",str);
}
starytx 2021-03-08
  • 打赏
  • 举报
回复
引用 5 楼 赵4老师 的回复:
上面是: 下面是. 废眼睛
老赵也错了,是格式化符号的问题,WORD要用%hu
赵4老师 2021-03-08
  • 打赏
  • 举报
回复
上面是: 下面是. 废眼睛
赵4老师 2021-03-08
  • 打赏
  • 举报
回复
CString str("2021-03-08 14:19:30:245"); SYSTEMTIME st; sscanf(str, "%04u-%02u-%02u %02u:%02u:%02u.%03u", &st.wYear,%st.wMonth, &st.wDay,&st.wHour,&st.wMinute,&st.wSecond,&st.wMilliseconds);
starytx 2021-03-08
  • 打赏
  • 举报
回复
引用 2 楼 forever74 的回复:
因为你在字符串里敲了冒号,却在格式串里敲了点。
这个是笔误,问题找到了,是要用%hu
forever74 2021-03-08
  • 打赏
  • 举报
回复
因为你在字符串里敲了冒号,却在格式串里敲了点。
starytx 2021-03-08
  • 打赏
  • 举报
回复
补充一下是vc6开发环境
打开链接下载源码: https://pan.quark.cn/s/8ec3d104bde6 华为MA5671是一款针对宽带接入需求而研发的智能型光猫设备,其核心应用场景为家庭用户及小型企业环境。该设备运用了千兆以太网技术,能够提供卓越的网络连接性能,从而使用户可以体验到稳定流畅的互联网服务。其完整名称为SmartAX MA5671,其中"SmartAX"是华为对其智能接入产品系列的特定命名,意指该设备具备智能化管理功能与自动化配置特性。固件,即Firmware,是指存储于硬件设备内部的一套程序代码,负责控制设备的各项功能运作并合理调配硬件资源。在华为MA5671设备中,固件发挥着核心作用,它直接影响着设备的操作系统运行机制、网络协议兼容性、安全防护机制以及性能表现等多个维度。"MA5671V8R313C00SPC100"作为该固件的标识编号,通过此代码可以解析出以下几个关键层面的信息: 1. **V8**:这通常象征固件的主版本号,或许表明这是第8代产品形态或第8次主要升级迭代。 2. **R313**:这可能代表固件的次级版本或修订层级,暗示着相较于V8版本,该版本经历了313次的迭代优化。 3. **C00**:这部分或许与设备的特定型号设定或地域适配性相关,不同的C00编码可能对应不同的功能模块配置或区域适应性调整。 4. **SPC100**:最后的这一段编码可能标识着特殊版本或性能增强配置,SPC(Special Performance Configuration)可能是华为针对特定性能优化版本设定的代号,而100可能代表这种优化措施的等级或序列编号。 在实际部署过程中,将固件保持为最新版本是非常重要的,这样做能够有效修正已知的安全隐患,优化设备运作效能,...
代码转载自:https://pan.quark.cn/s/558f943fe8b9 Oracle 11g是由甲骨文公司推出的一款面向企业级应用的数据管理平台,其具备丰富的功能特性与性能优化措施,能够充分满足大型商业机构及组织的复杂数据管理诉求。这份“Oracle 11g官方中文帮助文档”作为一份高清晰度且内容全面的资源,专门为中文使用者提供系统化的操作指引和必要的技术支持。 1. **Oracle 11g核心构成** - 数据库模型:该系统基于关系数据库架构,负责对结构化数据进行系统化存储和处理。 - 实例与服务机制:数据库实例指的是部署在服务器内存中的运行环境,而服务则是客户端接入数据库的核心通道。 2. **部署与设置** - 部署模式:涵盖高级部署流程和快速部署方案,以适应多样化的应用场景。 - 参数配置文件:初始化参数文件(init.ora)用于设定数据库的运行环境参数。 - 逻辑存储与物理存储:表空间作为数据库对象的逻辑组织单元,数据文件则是实际存放数据的物理载体。 3. **SQL与PL/SQL技术** - SQL指令集:主要用于数据库数据的查询、录入、修改及删除等操作。 - PL/SQL编程:作为Oracle的特色编程语言,支持过程化编程范式,常用于开发存储过程和触发器逻辑。 4. **安全防护机制** - 用户身份与角色管理:通过用户账户和角色权限体系来控制数据库的访问权限。 - 授权管理及审计功能:实现数据访问权限的精细化控制,并记录数据库活动日志以保障合规操作。 5. **效能提升策略** - 查询执行优化器:智能选择最优的查询执行路径。 - 重做日志与归档机制:保障事务的持久性和系统故障后的恢复能力。 - 数据分区技术:通过将大型数据表...

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧