C++ strftime方法格式输出时间错误

voidgetSysTime(char*out,constchar*format){time_tt=time(NULL);structtm*tm=localtime(&t... void getSysTime(char* out, const char* format)
{
time_t t = time(NULL);
struct tm* tm = localtime(&t);
strftime(out, sizeof(out), format, tm);
}

format为%Y%m%d时就只能输出201501,没有日期,而单独输出月和日也可以输出0120,out申请的空间肯定足够了,很奇怪的问题。如果输入的格式是%Y-%m-%d %H:%M:%S,就只输出2015-01。
搞得现在只能单独把年份输出出来以后,再和后面的月日时间拼字符串,麻烦啊。
展开
 我来答
拥云庄主
2015-01-20 · TA获得超过2505个赞
知道小有建树答主
回答量:672
采纳率:100%
帮助的人:424万
展开全部

C/C++中,数组作参数时,会退化成指针,所以你用sizeof(out)计算出来的长度就是指针的长度,根据你操作系统的位数,有可能是4或者8,也就是说最多往out里写4或者8个字节,所以,出来的结果就不对了,改一下就行了:

#include <stdio.h>
#include <time.h>
void getSysTime(char* out, const char* format)
{
    time_t t = time(NULL);
    struct tm* tm = localtime(&t);
    strftime(out, 100, format, tm);//可以接收的最大字符数修改一下,注意字符串结束符,我这里没处理,因为一般需要的长度不会超过100
}
int main()
{
        char cTime[100] = {0};
getSysTime(cTime, "%Y-%m-%d %H:%M:%S");
printf("%s\n", cTime);

return 0;
}

运行截图:

成都IO
2015-01-20 · TA获得超过117个赞
知道小有建树答主
回答量:153
采纳率:100%
帮助的人:129万
展开全部

和小白范提到的一样,你的maxsize是有问题的,而且也不能出现你所提到的结果。

以下代码仅供参考:

void getSysTime(char out[],int bufSize, const char* format)
{
time_t t = time(NULL);

struct tm tm;

localtime_s(&tm,&t);

strftime(out, bufSize, format, &tm);

}
int main(int argc, char* argv[])
{
char out[32]={0};

getSysTime(out,sizeof(out),"%Y-%m-%d");

printf("time:%s\n",out);
return 0;
}

 

你定义数组然后输出是和你传递参数在输出是不一样的!sizeof是以数组名为参数进行统计出当前数组的大小的!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来自月岩仪态万千的比目鱼
2015-01-20 · TA获得超过1571个赞
知道小有建树答主
回答量:1221
采纳率:50%
帮助的人:968万
展开全部
可能黑丝因为格式中有空格,导致输出的时候遇到空格就自动结束了。
你可以强制输出试试、
追问
没有空格,一般输出应该也是遇到\0结束吧
追答
%Y-%m-%d %H:%M:%S
这里不是有空格吗
你可以这样%Y-%m-%d-%H:%M:%S测试一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小白范
2015-01-20 · TA获得超过357个赞
知道小有建树答主
回答量:309
采纳率:50%
帮助的人:283万
展开全部
注意,out是char型的指针,sizeof(out) = sizeof(char*)=4
更多追问追答
追问
抱歉,这个我注意过了,输出sizeof(out),是20,我输入的是个20位的char数组
追答
在函数getSysTime内部,out不再是数组的名称,仅仅是一个指针。
你在out数据的作用域内计算sizeof(out)是20,但在函数内部计算sizeof(out)就不是20了,而是一个字长(在32位系统下就是4),不信你试试。
你还可以把strftime(out, sizeof(out), format, tm)改成strftime(out, 20, format, tm)试试。

正确的做法是,将out数组的大小也当作参数传给getSysTime函数。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是阿金
2015-01-20 · 超过25用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:42万
展开全部
strftime按照format获取时间 没有问题的。

调用的地方 参数有没有问题??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式