C语言 我试着创建一个函数来使用指针将str2连接到str1,但是它没有像我预期的那样工作

ymdaylpp  于 2022-12-29  发布在  其他
关注(0)|答案(3)|浏览(122)

我在C语言中使用指针创建了一个strcat,但是在while循环中遇到了以下问题。
这是我的代码,它无法将str2(这里是t)添加到str1(这里是s):

char *pstrcat(char *s,char *t)
{
    char *start=s;
    while(*s++)
        ;
    while(*s++=*t++){
        ;
    }
    return start;
}

我的主要代码是:

int main()
{
    char s[35]=" hi nice to meet you ";
    char t[]="ho";
    printf("%s",pstrcat(s,t));
    return 0;
}

期望值:
我期待的输出是hi nice to meet you ho,但得到的却是hi nice to meet you
然而,当我稍微改变while循环(pstrcat的第一个while循环)时,它开始工作。
新的while循环如下所示:

while(*s!='\0')
    s++;

问题简述:
我无法理解这两个循环的区别。我认为它们都应该工作,因为它们都必须在'\0'结束,s的地址当前指向'\0'
但是,如果我的代码不起作用,我一定是错了。

vktxenjb

vktxenjb1#

这个代码有两个问题。
1.目标数组没有足够的空间容纳额外的字符。

  1. pstrcat中的第一个while循环将指针移动到\0之外
while(*s++)
        ;

它可以重写为

while(*s)
   s++;
bprjcwpo

bprjcwpo2#

您可能不知道一个字符数组是否足够大,可以容纳两个字符串,因此创建一个新的字符数组会更安全,但您必须记住在使用完它之后释放它。要连接两个以null结尾的字符串,您可以执行以下操作...

char *pstrcat(char *s,char *t)
{
    char *start=malloc(strlen(s) + strlen(t) + 1);
    sprintf(start, "%s%s%c", s, t, 0);
    return start;
}

int main()
{
    char s[]=" hi nice to meet you \0";
    char t[]="ho\0";
    char *st = pstrcat(s,t);
    printf("%s",st);
    free(st);
    return 0;
}
deikduxw

deikduxw3#

感谢大家,我设法解决了这个问题,在以下两个方面:

char *pstrcat(char *s,char *t)
{
    char *start=s;
    while(*s++)
        ;/*in the end when *s=='\0' it is checked in while loop and after checking it is incremented to point at void hence we have to decrement once*/
    s--;
    while(*s++=*t++){
        ;
    }
    return start;
}
char *pstrcat(char *s,char *t)
{
    char *start=malloc(strlen(s)+strlen(t)+1);
    sprintf(start,"%s%s%c",s,t,0);
    return start;
}

相关问题