我自己的strcat函数使用C错误

时间:2012-08-29 03:46:53

标签: c string strcat

我基本上是用C编写我自己的字符串函数。

我一直在尝试使用指针执行strcat函数,似乎无法理解我是应该使用malloc分配内存还是将其留给堆。

char *my_strcat(const char *s1, const char *s2)
{


    const unsigned char *p1 = (const unsigned char *)s1;
    const unsigned char *p2 = (const unsigned char *)s2;

    unsigned char *string;
        //string = malloc(strlen(s1) + strlen(s2) + 1);
    while (*p1 != '\0')
{
        *string = *p1;
        string++;
        p1++;

        if(*p1 == '\0')
        {
            while(*p2 != '\0')
            {
                *string = *p2;
                string++;
                p2++;
            }
        }
    }
    return (char *)string;  
}

有关更有效地执行此任务的任何提示或我做错的事情都会很棒!

干杯

修改

好的,所以我得到了一个有效的解决方案,但只是想知道我使用malloc后我应该在哪里释放()它?

char *my_strcat(const char *s1, const char *s2)
{


    const unsigned char *p1 = (const unsigned char *)s1;
    const unsigned char *p2 = (const unsigned char *)s2;

    char *string = malloc(sizeof(char *));
    char *res = string;

    while (*p1 != '\0')
{
        *string = *p1;
        string++;
        p1++;
    }
    while (*p2 != '\0')
    {
        *string = *p2;
        string++;
        p2++;
}
    *string = '\0'; 

    return (char *)res; 
}

3 个答案:

答案 0 :(得分:3)

首先,我假设分配被错误地注释掉了。

  • 您需要保存分配的指针,然后将其返回。否则,您将返回一个指针string,它指向串联结果的 end
  • 您没有终止结果字符串;您需要添加*string = '\0'
  • 您应该将第二个循环移动到第一个循环的外部,并放弃if条件:如果第一个循环已终止,您知道*p1指向{{1} }

\0

答案 1 :(得分:2)

strcat不会分配任何内存,所以如果你想要完成同样的事情,那么你就不需要使用malloc了。

char* strcat(char* destination,char* source) {
 int c = 0;
 int sc;

 while(destination[c] != 0) {  c++; }

 for(sc = 0;sc < strlen(source);sc++) {
  destination[sc+c] = source[sc];
 }

 destination[sc+c] = 0;

 return destination;

}

答案 2 :(得分:0)

这对我有用。

char* my_strcat(char* a,char* b)
{
        int i,j;

        for(i=0;a[i];i++);
        for(j=0;b[j];j++,i++)
         a[i]=b[j];
        a[i]='\0';

}