求助!字符串乱码的问题

8a1b2c 2007-03-11 04:55:08
#include <stdio.h>

int ChangeTime(char *sInTime, char sOutTime[])
{
/* char sYear[4],sMonth[2],sDay[2];
char sHour[2],sMin[2],sSec[2];

sYear[4]=0;
sMonth[2]=0;
sDay[2]=0;
sHour[2]=0;
sMin[2]=0;
sSec[2]=0;*/
char sYear[4+1],sMonth[2+1],sDay[2+1];
char sHour[2+1],sMin[2+1],sSec[2+1];

strncpy(sYear,sInTime,4);
strncpy(sMonth,sInTime+4,2);
strncpy(sDay,sInTime+6,2);
strncpy(sHour,sInTime+8,2);
strncpy(sMin,sInTime+10,2);
strncpy(sSec,sInTime+12,2);

printf("%s%s%s%s%s%s\n",sYear,sMonth,sDay,sHour,sMin,sSec);
printf("%s-%s-%s %s:%s:%s\n",sYear,sMonth,sDay,sHour,sMin,sSec);
sprintf(sOutTime,"%s-%s-%s %s:%s:%s",sYear,sMonth,sDay,sHour,sMin,sSec);

if(strlen(sOutTime)!= 20)
{
return -1;
}
return 0;
}

int main(int argc,char **argv){

char *sInTime;
char sOutTime[30];


sInTime="20070301235959";

ChangeTime(sInTime,sOutTime);
printf("%s\n",sOutTime);
return 0;
}


运行结果是
20070301235959
2007?3@0103@0101235959
2007?3@01-03@01-01 23:59:59
2007?3@01-03@01-01 23:59:59

...全文
78 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
FigoZhu 2007-11-21
  • 打赏
  • 举报
回复
c-style的字符串需要以'\0'结尾的。
你使用了strncpy来复制字符串,会受到最大长度那个参数的限制。
比如,strncpy(sYear,sInTime,4); 这句执行后
sYear="2007?",应为你只复制了4个字符,sYear结尾的那个字符没有设置,是随机的内容。

所以,通常我们在使用数组之前,要进行初始化。

在styncpy之前,进行初始化,例如:
memset(sYear, 0x0, 4+1);

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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