localtime 和 localtime_r

---恢复内容开始---

 

上程序:

[c-sharp] view plaincopyprint?
  1. #include <cstdlib>  
  2. #include <iostream>  
  3. #include <time.h>  
  4. #include <stdio.h>   
  5.   
  6. using namespace std;  
  7.   
  8. int main(int argc, char *argv[])  
  9. {  
  10.     time_t tNow =time(NULL);  
  11.     time_t tEnd = tNow + 1800;  
  12.     //注意下面两行的区别   
  13.     struct tm* ptm = localtime(&tNow);  
  14.     struct tm* ptmEnd = localtime(&tEnd);  
  15.   
  16.     char szTmp[50] = {0};  
  17.     strftime(szTmp,50,"%H:%M:%S",ptm);  
  18.     char szEnd[50] = {0};  
  19.     strftime(szEnd,50,"%H:%M:%S",ptmEnd);  
  20.       
  21.   
  22.     printf("%s /n",szTmp);  
  23.     printf("%s /n",szEnd);  
  24.       
  25.   
  26.     system("PAUSE");  
  27.     return EXIT_SUCCESS;  
  28. }  

#include <cstdlib> #include <iostream> #include <time.h> #include <stdio.h> using namespace std; int main(int argc, char *argv[]) { time_t tNow =time(NULL); time_t tEnd = tNow + 1800; //注意下面两行的区别 struct tm* ptm = localtime(&tNow); struct tm* ptmEnd = localtime(&tEnd); char szTmp[50] = {0}; strftime(szTmp,50,"%H:%M:%S",ptm); char szEnd[50] = {0}; strftime(szEnd,50,"%H:%M:%S",ptmEnd); printf("%s /n",szTmp); printf("%s /n",szEnd); system("PAUSE"); return EXIT_SUCCESS; }

 

最后出来的结果是:

21:18:39

21:18:39

和最初想法不一致。

 

查阅localtime的文档,发现这段话:

This structure is statically allocated and shared by the functions gmtime and localtime. Each time either one of these functions is called the content of this structure is overwritten.

也就是说每次只能同时使用localtime()函数一次,要不就会被重写!

The localtime() function need not be reentrant. A function that is not required to be reentrant is not required to be thread-safe.

因此localtime()不是可重入的。同时libc里提供了一个可重入版的函数localtime_r();

Unlike localtime(), the reentrant version is not required to set tzname。

 

修改程序:

[c-sharp] view plaincopyprint?
  1. #include <cstdlib>  
  2. #include <iostream>  
  3. #include <time.h>  
  4. #include <stdio.h>   
  5.   
  6. using namespace std;  
  7.   
  8. int main(int argc, char *argv[])  
  9. {  
  10.     time_t tNow =time(NULL);  
  11.     time_t tEnd = tNow + 1800;  
  12.   
  13.     //在这里修改程序   
  14.     //struct tm* ptm = localtime(&tNow);   
  15.     //struct tm* ptmEnd = localtime(&tEnd);   
  16.     struct tm ptm = { 0 };  
  17.     struct tm ptmEnd = { 0 };  
  18.     localtime_r(&tNow, &ptm);  
  19.     localtime_r(&tEnd, &ptmEnd);  
  20.       
  21.     char szTmp[50] = {0};  
  22.     strftime(szTmp,50,"%H:%M:%S",&ptm);  
  23.     char szEnd[50] = {0};  
  24.     strftime(szEnd,50,"%H:%M:%S",&ptmEnd);  
  25.     printf("%s /n",szTmp);  
  26.     printf("%s /n",szEnd);  
  27.       
  28.   
  29.     system("PAUSE");  
  30.     return EXIT_SUCCESS;  
  31. }  

#include <cstdlib> #include <iostream> #include <time.h> #include <stdio.h> using namespace std; int main(int argc, char *argv[]) { time_t tNow =time(NULL); time_t tEnd = tNow + 1800; //在这里修改程序 //struct tm* ptm = localtime(&tNow); //struct tm* ptmEnd = localtime(&tEnd); struct tm ptm = { 0 }; struct tm ptmEnd = { 0 }; localtime_r(&tNow, &ptm); localtime_r(&tEnd, &ptmEnd); char szTmp[50] = {0}; strftime(szTmp,50,"%H:%M:%S",&ptm); char szEnd[50] = {0}; strftime(szEnd,50,"%H:%M:%S",&ptmEnd); printf("%s /n",szTmp); printf("%s /n",szEnd); system("PAUSE"); return EXIT_SUCCESS; }

 

最后出来的结果是:

10:29:06
10:59:06

http://blog.csdn.net/maocl1983/article/details/6221810

 

---恢复内容结束---

转载于:https://www.cnblogs.com/pengkunfan/p/3794662.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统关机助手

软件截图 软件说明 软件名称&#xff1a;系统关机助手 版本&#xff1a;v1.0 开发语言&#xff1a;易语言 软件说明&#xff1a;方便关机、重启、注销等操作的小软件&#xff0c;欢迎使用。 下载地址&#xff1a;http://download.csdn.net/detail/lecepin/9418082 博客名称&a…

poj1703

题目大意&#xff1a;一共有两个类&#xff0c;两种操作D X Y表示X Y在不同的类里面&#xff0c;A X Y 询问X Y之间的关系(未知&#xff0c;相同&#xff0c;不同) 分析&#xff1a;简单带权并查集&#xff0c;D[i]表示与i对立的类&#xff0c;维护好这个变量就可以了。 1 #inc…

SEO原创文章制作器

软件截图 软件说明 软件名称&#xff1a;SEO原创文章制作器 版本&#xff1a;v1.0 开发语言&#xff1a;易语言 软件说明&#xff1a;SEO福利工具&#xff0c;可直接从网上将内容复制到本软件&#xff0c;然后生成文字不一样但意思一样的原创文本。 此软件可以设置原创级别。…

水星MW300R v2 路由器刷DD-Wrt 小记

家里有一个水星MW300R v2 的路由器&#xff0c;之前在这个路由器上刷过OpenWrt&#xff08;可参照我这个博文&#xff1a;http://wlpblog.blog.163.com/blog/static/217614257201511252554386/&#xff09;&#xff0c;后来刷回了原系统。最近发觉这个路由器系统有点问题&#…

ns,ui

转&#xff1a;http://blog.csdn.net/fengsh998/article/details/8842885 Cocoa框架是iOS应用程序的基础&#xff0c;了解Cocoa框架&#xff0c;对开发iOS应用有很大的帮助。 1、Cocoa是什么&#xff1f; Cocoa是OS X和 iOS操作系统的程序的运行环境。 是什么因素使一个程序成为…

试题集—— 算法提高 学霸的迷宫

题目&#xff1a; 问题描述学霸抢走了大家的作业&#xff0c;班长为了帮同学们找回作业&#xff0c;决定去找学霸决斗。但学霸为了不要别人打扰&#xff0c;住在一个城堡里&#xff0c;城堡外面是一个二维的格子迷宫&#xff0c;要进城堡必须得先通过迷宫。因为班长还有妹子要陪…

kerberos 主从安装

hadoop 安全应用kerberos &#xff0c;搭建KDC使其高可用操作系统 ubuntu 12.04 Kerberos Server ##################### 规范介绍 #######################################Realm: BJPUC1.COM --> 建议大写Primary KDC: nn1.bjpuc1.com --> 建议用域名 192.168.88.16Se…

Android手机调整/data分区和/sdcard分区

现在手上有一块E160K的手机&#xff0c;手机内存是32GB的&#xff0c;由于之前对这个手机刷机不当&#xff0c;造成用户分区20GB多&#xff0c;而内置SD仅仅只有5GB多&#xff0c;造成了严重的资源浪费&#xff0c;所以我需要把这两个分区的大小调整一下。 问题分析&#xff1a…

自定义的事件管理器

自定义的事件管理器 周银辉 大多数框架下都提供了事件管理器的&#xff0c;但不使用框架时为了让事件发送者和事件接收者之间解耦&#xff0c;就可以如下写个简单的 public enum EventAdministratorEventTypes{ApplicationStartup, //在这里添加你需要的事件}public class Even…

高级堆排序

今天在一个OJ上做了一个叫“Advanced Heap Sort”的题&#xff0c;题的解决算法没什么难的&#xff0c;但是对时间复杂度有要求&#xff0c;用正常的算法实现&#xff0c;都会超时&#xff0c;所以我就把这个题拿过来分享一下。 问题&#xff1a; 题目内容&#xff1a; 有两个序…

可以创建专业的客户端/服务器视频会议应用程序的音频和视频控件LEADTOOLS Video Conferencing SDK...

LEADTOOLS Video Streaming Module控件为您创建一个自定义的视频会议应用程序和工具提供所有需要的功能。软件开发人员可以使用Video Streaming Module SDK&#xff0c;通过一些不同的配置来创建一些客户端/服务器应用程序。例如&#xff0c;如果有一个服务器需要向多个客户端发…

Joseph Problem(解约瑟夫问题)

今天在一个OJ上做了一个Joseph Problem&#xff08;解约瑟夫问题&#xff09;的题&#xff0c;题目不难&#xff0c;直接用循环链表模拟实际操作即可完成&#xff0c;但是用此种方法的时间太长&#xff0c;超时&#xff0c;所以我就用了一个大家对这类问题比较常用的解法——数…

linux下mono的安装与卸载

我很遗憾的告诉你&#xff0c;这里没有安装&#xff0c;为什么标题里加入安装俩字呢&#xff0c;因为如果不加的话你会搜到这篇文章吗&#xff1f;哈哈&#xff01;别气馁&#xff0c;这里会给你些安装的tips&#xff01; 源码安装&#xff0c;git安装&#xff1a;建议安装路径…

繁体简体转换器 v 1.0

软件截图 软件说明 软件名称&#xff1a;繁体简体转换器 软件版本&#xff1a; 1.0 开发语言&#xff1a;易语言 软件说明&#xff1a;本软件主要是用于繁体中文转换为简体中文的工具&#xff0c;如果你想把转换后的文本用于MarkDown中&#xff0c;可以勾选“HTML转义”复选…

C#实现Combobox自动匹配字符

不多说了,如图,应客户要求,下拉框中需要自动匹配字符,可能有些人一早就对此很熟,但相对于我还是首次使用,还是花了一点时间,现记录下来,也希望能帮助大家更好的理解. 首先要设定Combobox的DropDownStyle属性为DropDown,而不是DropDownList.然后设定匹配数据源,有两种方法 第一种…

按键 使用WinHttp实现POST方式用户模拟登录网站

引言 这篇文章是我以前在一个论坛里写的&#xff0c;今天把这篇文章转移到这里。 文章主要介绍了如何模拟一个网站的登录。 这里使用的辅助工具是按键精灵&#xff0c;编程语言类似于VB。 实现步骤 第一步&#xff0c;获取登录地址 打开登录界面&#xff1a; 打开调试工…

华硕 RT-AC54U路由器固件功能说明

引言 华硕 RT-AC54U这款路由器固件&#xff0c;界面做的很不错&#xff08;起码比OpenWrt要好看&#xff09;&#xff0c;功能也比较强悍&#xff0c;但是对于刚入手这个固件的用户可能会对此固件的一些很好用的功能无从下手&#xff0c;所以这里我就写下了这个文章。 固件亮…

HTML5中类jQuery选择器querySelector的使用

为什么80%的码农都做不了架构师&#xff1f;>>> 简介 HTML5向Web API新引入了document.querySelector以及document.querySelectorAll两个方法用来更方便地从DOM选取元素&#xff0c;功能类似于jQuery的选择器。这使得在编写原生JavaScript代码时方便了许多。 用法 …

Find the Kth number(找第K大数)

题目再现 题目内容&#xff1a; 给定N个排序好的序列&#xff0c;每个序列内有M个数字。因此我们总共有N*M个数字&#xff0c;编号为1~N*M。 将N*M个数字排序后输出第K个数字是多少。Hint : 直接将N*M个数字做排序会超过时间限制。 Hint : 每次花O(N)的时间找一个数字&#xf…

[Android开源项目] GitHub开源项目总结 (转)

[Android开源项目] GitHub开源项目总结 GitHub开源项目android-styled-dialogshttp://neast.cn/forum.php?modviewthread&tid5376&fromuid5GitHub开源项目之changeloghttp://neast.cn/forum.php?modviewthread&tid5375&fromuid5GitHub开源项目之AppRaterhtt…