使用含static变量的函数时需谨慎
来源:互联网 发布:mac chrome 无法下载 编辑:程序博客网 时间:2024/04/27 14:46
同事需要实现一个函数,来判断两个time_t类型的变量是否表示同一天。查了下AUPE, 他使用了localtime来将time_t类型的时间转换成真实世界的日期时间表示法。不过后来发现函数实现有问题,无论传入的两个time_t类型变量的值是多少,函数都返回是在同一天。
后来另一同事找到了问题的根源:locatime函数返回的struct tm *的指针指向的是函数内部的一个静态变量。如果多次调用localtime函数,静态变量的值是最后一次调用时的值。而同事两次调用了localtime函数,且只保留了指向静态变量的指针,所以 就会无法得到前一次的struct tm的值。
解决的方法也很简单,要么保存前一次的struct tm值,要么localtime比较安全的一个版本:
struct tm *localtime_r(time_t *CLOCK, struct tm *RES);
RES传入的一个struct tm变量的地址,这样 RES实际上起到了返回值的作用。
另外,以后碰到返回指针的函数就要多小心了。要清楚这个指针到底是指向哪里的 :-)
- 使用含static变量的函数时需谨慎
- Asp.net Static变量谨慎使用
- 谨慎使用asp.net中的static变量
- Asp.net Static变量谨慎使用
- 谨慎Asp.net中static变量的用法
- 谨慎Asp.net中static变量的用法
- 谨慎Asp.net中static变量的用法
- 谨慎Asp.net中static变量的用法
- 谨慎Asp.net中static变量的用法
- 谨慎Asp.net中static变量和viewstate的用法
- 谨慎Asp.net中static变量的用法
- Asp.net中static变量和viewstate的使用方法(谨慎)
- Asp.net中static变量和viewstate的使用方法(谨慎)
- Asp.net中static变量和viewstate的使用方法(谨慎)
- 含虚函数的struct在其构造中要谨慎使用memset函数对数据成员清零
- static变量的使用
- 谨慎使用IsMissing函数
- static变量和static函数的用法
- struts使用list提交多行表单(提供完整示例)
- expect vs shell
- APT工作原理
- PIX501防火墙实战篇
- Ubuntu软件包管理概述
- 使用含static变量的函数时需谨慎
- 从我玩SNS想到自己的核心力
- C#迭代器的实现
- Java人民币小写转大写(小数点后只支持到分)
- 五年
- Linux中统计文件夹内各种文件类型的数量
- 关于android手机
- 关于c里面 用 %[] 输入字符串的问题 【摘自旧博】
- 准备出发