27149_智者天下 发表于 2014-7-12 13:20:20

用C语言自己写strcat遇到的问题

目标是用for循环来写,自己写了一段,不知道错误在哪,其中StringLen()已经成功实现了,得到了字符串的长度。编译通过,不知道实际错误在哪?
char* StringCat(char* s1,char* s2)
{

        int Len1 = StringLen(s1);
        int Len2 = StringLen(s2);
        char* s = (char*)malloc(sizeof(char)*(Len1+Len2+1));
       
        int i;
        for(i=0;i<Len1;i++)
        {
                *(s+i) = *(s1+i);
        }
       
        int j;
        for(j=0;j<Len2;j++)
        {
                *(s+Len1+j) = *(s2+j);
               
        }

        *(s+Len1+Len2) = '\0';
        *s1 = *s;
        free(s);
        return s1;
       
}

农夫三拳有点痛 发表于 2014-7-12 13:36:17

不知道这样可不可以:big
#include <iostream>
using namespace std;
char* StringCat(char* s1,char* s2)
{

      int Len1 = strlen(s1);//StringLen(s1)
      int Len2 = strlen(s2);//StringLen(s2)
      for(int i=0;i<Len2;i++)
                {
                        s1=s2;
                }
      return s1;   
}
int main()
{
        char s1="c/",s2[]="c++";
        char* s3=StringCat(s1,s2);
        cout<<s3<<endl;
        return 0;
}

27149_智者天下 发表于 2014-7-12 13:47:07

农夫三拳的代码可以执行,但是我的问题是 : 我的代码错误在哪里,请指出来,谢谢

vkevke_3437 发表于 2014-7-13 03:30:24

27149_智者天下 发表于 2014-7-12 13:47
农夫三拳的代码可以执行,但是我的问题是 : 我的代码错误在哪里,请指出来,谢谢

*s1 = *s; 错误, 长度不一样 这样赋值 *s1还是相当于*s1

kikiatw 发表于 2014-7-13 05:43:17

我覺得你可以再寫一個strtok 以及替代字串跟替代字元的函數看看
比如說一個字串"skfjwnwfkmgwlg||||fkkrkjgl" 把 "||||" 替代成其他的字串, 這個難度有點高嘗試看看

戏++ 发表于 2014-7-16 21:34:55

*s1 = *s;
楼主太想当然了,这是初学者容易出现的问题,这个地方应该用strcpy函数,楼主可以自己也去实现一个
还有就是这个函数的s1所指的字符串空间需要足够长,否则容易越界,
越界判断在字符串操作的时候需要考虑

戏++ 发表于 2014-7-16 21:43:15

#include <stdio.h>
int main()
{
        char s1="123",s2[]="abc";
        *s1 = *s2;
    printf("%s\n",s1);
    return 0;
}


*s1 = *s2;
相当于   s1 = s2;
因为s1是char* 类型,   
所以 *s1 只能取到一个char的内存,就是s1所指向的字符串的第一元素

农夫三拳有点痛 发表于 2014-7-17 15:22:32

- -我以为你是问怎么写.....
页: [1]
查看完整版本: 用C语言自己写strcat遇到的问题