|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<stdio.h>
- void strcat(char *p, char *q, char *t);
- char* strcat2(char *p, char *q);
- int main(){
- char p[] = "aaaa";
- char q[] = "bbbb";
- char *prt;
- prt = strcat2(p, q);
- for(; *prt != '\0'; prt++)
- printf("%c", *prt);
- return 0;
- }
- void strcat(char *p, char *q, char *t){
- while(*t++ = *p++)
- ;
- while(*t++ = *q++)
- ;
- }
- char* strcat2(char *p, char *q){
- static char *t;
- while(*t++ = *p++)
- ;
- while(*t++ = *q++)
- ;
- return t;
- }
复制代码
请教什么原因
- #include <stdio.h>
- #include <stdlib.h>
- typedef char * Bchar;
- void strcat1(char *p, char *q, char *t);
- char* strcat2(char *p, char *q);
- int main(void)
- {
- char p[] = "aaaa";
- char q[] = "bbbb";
- char *prt1, *prt2;
- prt1 = (char *)malloc(sizeof(char)*25); // prt1只是声明为给定义与空间存放,需要有一个空间
-
- strcat1(p, q, prt1);
- printf("stract1:%s\n", prt1); // 直接%s打印会好一点
- prt2 = strcat2(p, q);
- printf("stract2:%s\n", prt2);
-
- return 0;
- }
- void strcat1(char *p, char *q, char *t)
- {
- while(*t++ = *p++)
- ;
- t--; // 去掉p[]末尾的'\0',就是让t回到前一个地址,用q数据覆盖
- while(*t++ = *q++)
- ;
- }
- char* strcat2(char *p, char *q)
- {
- static char *t;
- char *b; // 用于保存t开始的地址,因为t一直往后走,传回去的是走到最后地址了,再打印就出错了
-
- t = (char *)malloc(sizeof(char)*25);
- b = t;
- while(*t++ = *p++)
- ;
- t--;
- while(*t++ = *q++)
- ;
-
- return b;
- }
复制代码
|
|