字符串连接问题!
#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 ',然后再连接就好了。