Archive for 10月 2012

多思多想,根据函数定义找隐藏信息

今天遇到一个很长时间都没发现的问题

先看看这个函数定义:

struct tm *localtime(const time_t *clock);

一般情况下大家都不会觉得这个函数有什么问题

使用的时候通常会根据习惯这样写:

struct tm *pTime = localtime(const time_t *clock);

当然,一般这样用是没问题的,函数返回指针,我用指针接收它,当然不会有问题

但是当你仔细想想这个指针的存储位置时,你可能会想到一个很容易被忽略的问题:

第一:它不可能是栈地址,原因不用说,因为从下层堆栈返回一个栈地址给上层堆栈肯定是用不了的,会报段错误。

第二:它可能是new出来的堆地址,如果真是这样他肯定还会写一个回收这个地址的接口。或者他也会在说明文档里说明,那就要调用者自己去delete,当然这样很不友好,容易导致内存泄露,一般不会这样做。

第三:它可能是一个静态地址,如果真是这样。那你就得注意了,任何调用这个接口的地方返回的都是同一个地址,你必须即取即用。

第四:它可能是一个上层堆栈传进去的上层栈地址,但是从这个接口来看根本没有传地址进去,所有这个情况也不可能。

说了这么多,那么我们来看看这个函数的说明:

The return value points to a statically allocated struct which might be
overwritten by subsequent calls to any of the date and time functions.

这里已经清楚的说明这个函数是返回了一个静态结构体指针。每次调用都会覆盖里面的数据。

localtime和localtime_r

上程序:

#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

和最初想法不一致。

Continue reading ‘localtime和localtime_r’ »

布欧剃毛啦~

终于。。终于。。经过了几乎5个月的时光后。。

布欧的疫苗算是完全打完而且已经进入安全期了。内心无比的激动,要知道布欧可是5个月没洗澡了~

哈哈~平时看他就像个流浪狗似的。但是又没办法,为了她的健康,只能让她忍忍了。

下面是布欧4个多月的时候的照片,那时候我们还住在城中村:

怎么看怎么像个流浪狗,哈哈。

Continue reading ‘布欧剃毛啦~’ »

在此揭露一个无耻的狗贩,南海大沥超越狗场

他们经常在广州各大论坛上宣传自己是广州最大的养殖基地,有大型训练场地云云。。

包括58同城,广宠网,狗民网等等,58同城上最多他们的广告,经常换不同账号用不同名字发广告

什么广州最大养殖基地,广州安妮犬业等。。都是他们自己人弄的

网上贴的照片全是一套不知道哪弄来的,还声称自己服务非常周到,在他们那里买狗包永久疫苗,美容,看病,寄养等

包狗狗纯正,包品相体型,买狗签售后合同。。看到这里你是不是心动了?

你是不是看在他们那么多服务的条件上觉得在这里买准没错了?

你要是这样想,那你就大错特错了,百度一下大沥狗贩你就能看见他们的丑陋行径,他们打着优质服务,大型狗场的名号到处招摇撞骗

实际上他们根本没有自己的狗场,有一个网站已经清楚揭露过他们的行径http://news.hitvs.cn/bbs/BBSTopicRead-baoliao-409967-1.htm

Continue reading ‘在此揭露一个无耻的狗贩,南海大沥超越狗场’ »

Buu记事薄

生日:2012年6月6日

带回家:2012年8月14日

第一针疫苗:2012年9月8日

第二针疫苗:2012年9月28日

第三针疫苗+狂犬:2012年10月20日

下次疫苗,狂犬:2013年9月20日

第一次驱虫:2012年9月15日(驱虫失败)

第二次驱虫:2012年10月3日(成功塞进嘴巴)

第三次驱虫:2013年2月10日左右

2012年9月6日      3月龄    约3斤

2012年10月6日    4月龄    约4斤      体长24  肩高24 (狗日的狗贩子,不解释)

2012年10月27日    布欧剃毛,洗澡了

2012年10月29日    发现布欧掉了两颗牙

2012年12月17日  6月半龄  6斤   体长28  肩高28

2013年4月26日 布欧还有1颗小牙没掉