关于结构体数组赋值的问题

辶井 2018-04-12 05:59:47
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>

struct time
{
char ctime[19];
}T[5];


char current[19];

char getTime()
{
timespec time;
clock_gettime(CLOCK_REALTIME, &time); //获取相对于1970到现在的秒数
tm nowTime;
localtime_r(&time.tv_sec, &nowTime);
sprintf(current, "%04d-%02d-%02d-%02d:%02d:%02d", nowTime.tm_year + 1900, nowTime.tm_mon+1, nowTime.tm_mday, nowTime.tm_hour, nowTime.tm_min, nowTime.tm_sec);

}

int main()
{
for(int i=0;i<5;++i)
{
memset(current,0,sizeof(char)*19);
getTime();
strcpy(T[i].ctime,current);
printf("t[%d], ctime=%s, currtime=%s\n",i,T[i].ctime,current);
sleep(2);
}
printf("t[0]=%s\nt[1]=%s\nt[2]=%s\nt[3]=%s\nt[4]=%s\n",T[0].ctime,T[1].ctime,T[2].ctime,T[3].ctime,T[4].ctime);
return 0;
}


赋值时打印显示正常,但是赋值晚打印就出问题了,如上图,请问是怎么回事呢?
...全文
298 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-04-12
  • 打赏
  • 举报
回复
引用 1 楼 cfjtaishan 的回复:
"%04d-%02d-%02d-%02d:%02d:%02d“
4+1+2+1+2+1+2+1+2+1+2 = ? 建议算一下这个字符串需要多少个字节,感觉这个字符串的长度大于19(不要忘了'\0'),因此,建议将current数组加长(至少20个字节)比较合适;
同理适用ctime,也需要加大。至少20个字节,可以考虑32个字节
srhouyu 2018-04-12
  • 打赏
  • 举报
回复
你的ctime和current里面没有放'\0'的位置。要把这两个数组弄大一些,至少20。
自信男孩 2018-04-12
  • 打赏
  • 举报
回复
"%04d-%02d-%02d-%02d:%02d:%02d“
4+1+2+1+2+1+2+1+2+1+2 = ? 建议算一下这个字符串需要多少个字节,感觉这个字符串的长度大于19(不要忘了'\0'),因此,建议将current数组加长(至少20个字节)比较合适;

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧