谁能解释这两个函数的区别?

dfczj 2007-06-07 09:30:10
#include <stdio.h>
#include <stdlib.h>

char* strcat0(char *p,char *q)
{
char *t=p;
while(*t!='\0'){t++;}
while((*t++=*q++)!='\0');
*t='\0';
return (p);
}

char* strcat1(char *p,char *q)
{
while(*p!='\0'){p++;}
while((*p++=*q++)!='\0');
*p='\0';
return (p);
}

int main()
{
char str[]="12345";
char str2[]="abcdefgh";
printf("%s\n",strcat0(str2,str));
}

strcat0,strcat1谁能解释这两个函数的区别?
strcat0可以达到连接字符串的目的,
...全文
272 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bmpbaixiaosheng 2007-06-08
  • 打赏
  • 举报
回复
believefym(feng)讲得蛮好
xdlhf 2007-06-07
  • 打赏
  • 举报
回复
strcat1的返回值不能用,因为其在程序中已经改变了,指向原字符串的最后了。
bierhoffwang 2007-06-07
  • 打赏
  • 举报
回复
t是指针,返回的是地址。函数结束后,t销毁了,但它所指向的字符串还在。
dg243 2007-06-07
  • 打赏
  • 举报
回复
有收获,
都是传回一个地址吗
不知道这样理解对不对
dfczj 2007-06-07
  • 打赏
  • 举报
回复
我现在改成这样也行,可是*t是局部变量呀,怎么可以返回呢?
char* strcat0(char *p,char *q)
{
char *t=p;
while(*p!='\0'){p++;}
while((*p++=*q++)!='\0');
*p='\0';
return (t);
}
yixiao386 2007-06-07
  • 打赏
  • 举报
回复
strcat1经过多次循环后指针p已经指向最后面,再返回的时候肯定不能返回整个字符串
believefym 2007-06-07
  • 打赏
  • 举报
回复
区别就是返回的字符串起始位置不同,虽然strcat1也实现了链接,但是指针p已经知道最后去了,无法返回整个字符串,必须用临时变量保留第一个字符串的首地址才能返回整个串,就像strcat0那样
physaris 2007-06-07
  • 打赏
  • 举报
回复
printf("%s\n",strcat0(str2,str));
在这里实际上有一个临时变量
todototry 2007-06-07
  • 打赏
  • 举报
回复
up
dfczj 2007-06-07
  • 打赏
  • 举报
回复
ding

33,311

社区成员

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

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