本文介绍strftime函数的正确用法以及注意事项。
一、strftime函数原型
size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const struct tm *timeptr
);
二、strftime函数参数说明
strDest:
输出字符串缓冲区
maxsize:参数
strDest
的大小,该参数值必须不小于时间字符个数+1(结束字符’\0’)
format:输出格式字符串
timeptr:
tm
结构体变量的指针
返回值:strftime
返回写入 strDest
的字符个数;如果字符个数+1(包含结束字符’\0′)超过maxsize,函数返回0,且
strDest
缓冲区内容未定义。
结束字符’\0’不包含在返回值所指的字符个数中;但设定参数maxsize时,需要将结束字符’\0’也算在内,否则,函数执行结果未定义。
三、代码示例
struct tm curTime;
time_t lt1;
time(<1);
localtime_s(&curTime, <1);
char dateBuf[7];
strftime(dateBuf, 7, “%y%m%d”, &curTime);
从上面代码中发现,按照第三个参数”%y%m%d”生成时间字符串,应该输出6个字符,但第二个参数值必须大于(6+1),因为需要包含结束字符;
因此,还需要注意的是,因为该函数向缓冲区写入的字符个数是(6+1),所以,如果dateBuf[6]的值有其它用途,记得防止在调用该函数后,dateBuf[6]内容被覆盖为’\0′.
四、扩展知识
如果觉得strftime函数不好用(容易误改写缓冲区内容),可以选用如下方式生成日期时间字符串;
struct tm curTime;
char tmpbuf[15];
time_t lt1;
time(<1);
localtime_s(&curTime, <1);
sprintf_s(tmpbuf, “%4d%02d%02d%02d%02d%02d”, curTime.tm_year + 1900, curTime.tm_mon + 1, curTime.tm_mday, curTime.tm_hour, curTime.tm_min, curTime.tm_sec);
tmpbuf[14] = ‘\0’;
暂无评论内容