簡體   English   中英

我自己的使用C錯誤的strcat函數

[英]my own strcat function using C errors

我基本上是用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之后應該在哪里free()?

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; 
}

首先,我假設分配被錯誤地注釋掉了。

  • 您需要保存分配的指針,然后將其返回。 否則,您將返回一個指針string ,它指向串聯結果的末尾
  • 您不終止結果字符串; 您需要添加*string = '\\0'
  • 您應該將第二個循環移到第一個循環的外部,並在其周圍放下if條件:如果第一個循環已終止,則知道*p1指向\\0

char *string = malloc(strlen(s1) + strlen(s2) + 1);
char *res = string;
for (; *p1 ; *string++ = *p1++);
for (; *p2 ; *string++ = *p2++);
*string = '\0';
return res;  

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;

}

這對我有用。

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';

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM