首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串连接有关问题

2012-04-10 
字符串连接问题!#includetime.h#includestdio.hvoidgetCurrentTime(char*str)intmain(){charmyTime[3

字符串连接问题!
#include   <time.h>
#include   <stdio.h>

void   getCurrentTime(char   *str);

int   main(){
char   myTime[30];
char   *tmpStr=NULL;
getCurrentTime(myTime);
printf( "Current   time:   %s\n ",myTime);
tmpStr=(char   *)malloc(strlen(myTime)+1);
strcat(tmpStr,myTime);
printf( "Second   point:   %s\n ",tmpStr);
free(tmpStr);
return   0;
}

void   getCurrentTime(char   *str){
time_t   now;
struct   tm   *timenow;
time(&now);
timenow=localtime(&now);
strftime(str,30, "%Y%m%d%H%M%S ",timenow);
}

在主函数中用strcat对myTime进行处理,编译能通过,但是时总会出现如下结果:
Current   time:20070717131311
Second   point:   PcBPcB????20070717131311
***   glibc   detected   ***   /home/netlink/test2/subtime:   free():   invalid   next   size   (fast):   0x08f1b050   ***
=======   Backtrace:   =========
/lib/libc.so.6[0x4255befd]
/lib/libc.so.6(cfree+0x90)[0x4255f550]
/home/netlink/test2/subtime[0x804859e]
/lib/libc.so.6(__libc_start_main+0xdc)[0x4250bf2c]
/home/netlink/test2/subtime[0x80483f1]
=======   Memory   map:   ========
00fdd000-00fde000   r-xp   00fdd000   00:00   0                     [vdso]
08048000-08049000   r-xp   00000000   fd:00   979310           /home/netlink/test2/subtime
08049000-0804a000   rwxp   00000000   fd:00   979310           /home/netlink/test2/subtime
08f1b000-08f3c000   rwxp   08f1b000   00:00   0  
41b27000-41b40000   r-xp   00000000   fd:00   558656           /lib/ld-2.5.so
41b40000-41b41000   r-xp   00018000   fd:00   558656           /lib/ld-2.5.so
41b41000-41b42000   rwxp   00019000   fd:00   558656           /lib/ld-2.5.so
424f6000-4262d000   r-xp   00000000   fd:00   558657           /lib/libc-2.5.so
4262d000-4262f000   r-xp   00137000   fd:00   558657           /lib/libc-2.5.so
4262f000-42630000   rwxp   00139000   fd:00   558657           /lib/libc-2.5.so
42630000-42633000   rwxp   42630000   00:00   0  
430a3000-430ae000   r-xp   00000000   fd:00   558679           /lib/libgcc_s-4.1.1-20061011.so.1
430ae000-430af000   rwxp   0000a000   fd:00   558679           /lib/libgcc_s-4.1.1-20061011.so.1
b7e00000-b7e21000   rw-p   b7e00000   00:00   0  
b7e21000-b7f00000   ---p   b7e21000   00:00   0  
b7f21000-b7f22000   rw-p   b7f21000   00:00   0  
b7f2e000-b7f30000   rw-p   b7f2e000   00:00   0  
bfd16000-bfd2b000   rw-p   bfd16000   00:00   0                     [stack]
在打印tmpStr时,出现额外乱码-> PcBPcB????,还有就是后面的free()的错

我要实现的是把三个字符串连接起来,这三个字符串分别是:
char   *st1= "This   is   start.   ";
第二个字符串是通过getCurrentTime()函数所获取的字符串
char   *st3= "This   is   end. "
我是想用strcat()将这三个字符串依次连接起来,所以应该用strcat()函数啊,不能用strcpy()吧,我定义tmpStr的目的是实现如下操作:
strcat(tmpStr,st1);


strcat(tmpStr,myTime);
strcat(tmpStr,st3);
最后得到的tmpStr是我想要的字符串,现在只要一加上面的第二句就出先第一篇帖子中所示的问题.偶新手上路,所以谢谢各位能讲详细点,最好能给出例子,谢谢啦!


[解决办法]
strcpy(tmpStr,myTime);
[解决办法]
#include <time.h>
#include <stdio.h>

int main() {
char myTime[30];
char *tmpStr=NULL;

getCurrentTime(myTime);
printf( "Current time: %s\n ", myTime);

tmpStr=(char *)malloc(strlen(myTime)+1);
memset(tmpStr, '\0 ', strlen(myTime)+1); // 这里修改一下
strcat(tmpStr, myTime);
printf( "Second point: %s\n ", tmpStr);

free(tmpStr);
return 0;
}

void getCurrentTime(char *str) {
time_t now;
struct tm *timenow;
time(&now);
timenow=localtime(&now);
strftime(str, 30, "%Y%m%d%H%M%S ", timenow);
}

这是因为strcat是先计算到tmpStr的第一个 '\0 '处,然后再进行连接,所以先把其他清为 '\0 ',然后再连接就好了。

热点排行