免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1310 | 回复: 8
打印 上一主题 下一主题

c程序求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-10 21:42 |只看该作者 |倒序浏览
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;


        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\n",sYear);
        printf("%s\n",sMonth);
        printf("%s\n",sDay);
        printf("%s\n",sHour);
        printf("%s\n",sMin);
        printf("%s\n",sSec);


        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,*sOutTime;

        
        sInTime="20070301235959";

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


程序运行到sprintf的时候core了,为什么
而且printf的时候的和gdb的时候也不一样,
哪位给指点一下

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2007-03-10 22:41 |只看该作者
sOutTime指向何处?
我发现这种问题几乎天天出现。

评分

参与人数 1可用积分 +1 收起 理由
langue + 1

查看全部评分

论坛徽章:
0
3 [报告]
发表于 2007-03-11 08:46 |只看该作者

回复 2楼 lenovo 的帖子

这才叫 FAQ

论坛徽章:
0
4 [报告]
发表于 2007-03-11 09:35 |只看该作者
那要如何写呢??

论坛徽章:
0
5 [报告]
发表于 2007-03-11 09:39 |只看该作者
.

如何把 sOutTime 指到一个实际分配好的内存区域上?**

** 注:问题的解决,有多种策略可以采用。换一种描述方式,也是解决问题的良好策略。

.

论坛徽章:
0
6 [报告]
发表于 2007-03-11 09:47 |只看该作者
这种是什么??
       sYear[4]=0;
        sMonth[2]=0;
        sDay[2]=0;
        sHour[2]=0;
        sMin[2]=0;
        sSec[2]=0;

里面的数字都要减1吧???

评分

参与人数 1可用积分 +1 收起 理由
langue + 1 我很赞同

查看全部评分

论坛徽章:
0
7 [报告]
发表于 2007-03-11 15:40 |只看该作者
        sYear[4]=0;
        sMonth[2]=0;
        sDay[2]=0;
        sHour[2]=0;
        sMin[2]=0;
        sSec[2]=0;

数组都越界了~

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
8 [报告]
发表于 2007-03-11 17:45 |只看该作者
原帖由 lenovo 于 2007-3-10 22:41 发表
sOutTime指向何处?
我发现这种问题几乎天天出现。

本质原因是因为新手还没有搞清楚指针和缓冲区的关系

论坛徽章:
0
9 [报告]
发表于 2007-03-12 09:34 |只看该作者
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;


        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\n",sYear);
        printf("%s\n",sMonth);
        printf("%s\n",sDay);
        printf("%s\n",sHour);
        printf("%s\n",sMin);
        printf("%s\n",sSec);


        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,sOutTime[15];

        memset(sOutTime,0,15);
        sInTime="20070301235959";

        ChangeTime(sInTime,sOutTime);
        printf("%s\n",sOutTime);
        return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP