C语言问题!!!急!(指针形参,指针返回值相关)

2024年12月02日 23:34
有2个网友回答
网友(1):

char *mystrcat(char *s1,const char *s2)
{
char *s1_tmp = *s1; //话说 你要把*s1改成s1 char *s1_tmp = *s1;表示吧s1的地址给
//字符型指针 s1_tmp
const char *s2_tmp = *s2; // 你要把*s2改成s2
while(*s1_tmp!='\0') //才能通过编译吧
{
s1_tmp++;
}
while(*s2_tmp!='\0') //这个while整体意思是把"def"放到"abc"后面,即ss1[3]='d' ss1[4]='e'
ss1[5]='f'
{
*s1_tmp = *s2_tmp; //这时s1_tmp指向的是结束符('\0'),即ss1[3],但s2_tmp指向的是d,在这
里等于把d放到"abc"的后面了
s1_tmp++; //这时s1_tmp指向ss1[4]
s2_tmp++; //s2_tmp指向'e'
}
*s1_tmp = '\0'; //在这里*s1_tmp指向的地址内容已经变成了 结束符('\0')
return s1; // 如果return s1_tmp;就会输出结束符(就什么都没了)

char *mystrcat(char *s1,const char *s2)
{
while(*s1!='\0')
{
s1++;
}
while(*s2!='\0')
{
*s1 = *s2;
s1++;
s2++;
}
*s1 = '\0'; //这里同上理
return s1;
}

我想问一句 楼主还在吗??

网友(2):

不幸让你说中了,的确是“因为*s1最后赋值是0”!!!!

while(*s1!='\0')
{
 s1++; //这里s1在变化
}
while(*s2!='\0')
{
 *s1 = *s2;
 s1++; //这里也在变化
 s2++;
}

*s1 = '\0'; //到这里s1已经不是原来的s1了,是它的尾巴
return s1; //返回一个尾巴,而且尾巴值是0,当然输出的是空的,修改方案如下:

char *mystrcat(char *s1,const char *s2)
{
char *s1_bak=s1; //先记下原来s1的位置
  while(*s1!='\0')
 {
  s1++;
 }
 while(*s2!='\0')
 {
  *s1 = *s2;
  s1++;
  s2++;
 }
 *s1 = '\0';
 return s1_bak; //返回原来的s1位置,就好了!!
}