getsystemtime出现异常,年份和月份重复出现13363和14390

qq_27437671 2017-08-31 09:39:06

如图,我做串口通信,用systemtime来获取接收数据的时间,并且以分钟为单位,每分钟存一个txt,结果就会出现这种异常,有遇到这种情况的吗?
...全文
450 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
应该是写其他变量的时候覆盖了SYSTEMTIME结构。
qq_27437671 2017-09-01
  • 打赏
  • 举报
回复
调用sprintf我就用的最普通的和常见的sprintf(str,“%d”,st.wYear)。检查了。不是这边的问题。
qq_27437671 2017-09-01
  • 打赏
  • 举报
回复
引用 12 楼 qq_27437671 的回复:
引用 11 楼 DelphiGuy 的回复:
[quote=引用 9 楼 qq_27437671 的回复:] [quote=引用 8 楼 DelphiGuy 的回复:] 没有影响,除非你在多线程中调用GetSystemTime/GetLocalTime,但写同一个SYSTEMTIME
我是在一个线程里用的。前面getlocaltime,后面sprintf成字符串,然后用来作为文件名存文件另外我设置断点之后,发现getlocaltime的结果就是错误的。
应该不可能,也许是调用sprintf格式的问题。 [/quote]你看getlocaltime就错了[/quote] 坑,图怎么传不了
qq_27437671 2017-09-01
  • 打赏
  • 举报
回复
引用 11 楼 DelphiGuy 的回复:
引用 9 楼 qq_27437671 的回复:
[quote=引用 8 楼 DelphiGuy 的回复:]
没有影响,除非你在多线程中调用GetSystemTime/GetLocalTime,但写同一个SYSTEMTIME
我是在一个线程里用的。前面getlocaltime,后面sprintf成字符串,然后用来作为文件名存文件另外我设置断点之后,发现getlocaltime的结果就是错误的。


应该不可能,也许是调用sprintf格式的问题。
[/quote]你看getlocaltime就错了
  • 打赏
  • 举报
回复
引用 9 楼 qq_27437671 的回复:
引用 8 楼 DelphiGuy 的回复:
没有影响,除非你在多线程中调用GetSystemTime/GetLocalTime,但写同一个SYSTEMTIME
我是在一个线程里用的。前面getlocaltime,后面sprintf成字符串,然后用来作为文件名存文件另外我设置断点之后,发现getlocaltime的结果就是错误的。
应该不可能,也许是调用sprintf格式的问题。
qq_27437671 2017-09-01
  • 打赏
  • 举报
回复
引用 8 楼 DelphiGuy 的回复:
没有影响,除非你在多线程中调用GetSystemTime/GetLocalTime,但写同一个SYSTEMTIME
qq_27437671 2017-09-01
  • 打赏
  • 举报
回复
引用 8 楼 DelphiGuy 的回复:
没有影响,除非你在多线程中调用GetSystemTime/GetLocalTime,但写同一个SYSTEMTIME
我是在一个线程里用的。前面getlocaltime,后面sprintf成字符串,然后用来作为文件名存文件另外我设置断点之后,发现getlocaltime的结果就是错误的。
  • 打赏
  • 举报
回复
没有影响,除非你在多线程中调用GetSystemTime/GetLocalTime,但写同一个SYSTEMTIME
qq_27437671 2017-09-01
  • 打赏
  • 举报
回复
引用 6 楼 DelphiGuy 的回复:
应该是写其他变量的时候覆盖了SYSTEMTIME结构。
调试时候发现getlocaltime(&st)这里出错了。是不是因为我记录时间太快了?这个获取时间的最大频率是多少呢?
qq_27437671 2017-08-31
  • 打赏
  • 举报
回复
引用 1 楼 u010165006 的回复:
你是用C++ Builder吗?
w(゚Д゚)w我用的VS2010,现在不是那两个数字重复出现了。而是有了别的随机值。获取时间也不是一直错误,是偶尔错误。
ooolinux 2017-08-31
  • 打赏
  • 举报
回复
你是用C++ Builder吗?
qq_27437671 2017-08-31
  • 打赏
  • 举报
回复
引用 4 楼 DelphiGuy 的回复:
估计是某些数据溢出了,把SYSTEMTIME结构的年月覆盖了,检查与SYSTEMTIME结构相邻的变量。
那部分我就只写了SYSTEMTIME,没涉及到别的变量啊
  • 打赏
  • 举报
回复
估计是某些数据溢出了,把SYSTEMTIME结构的年月覆盖了,检查与SYSTEMTIME结构相邻的变量。
赵4老师 2017-08-31
  • 打赏
  • 举报
回复
程序别的地方“踩了”SYSTIME结构体所在位置的内存。我猜。 使用内存值改变断点,找出是谁踩的。 内存值改变断点参考下面:
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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