最新消息:

strftime函数的正确用法

零散记录 CPPKU 22浏览 0评论

本文介绍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(&lt1);
localtime_s(&curTime, &lt1);

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(&lt1);
localtime_s(&curTime, &lt1);

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’;

转载请注明:cppku-C++库 » strftime函数的正确用法

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址