自制连接功能

时间:2018-06-17 13:32:52

标签: c string concatenation c-strings

我正在尝试用C语言创建一个连接函数,我是初学者......

但我有一个问题,我的函数只连接第二个字符串的第一个字符,但不适用于所有字符串。

示例:

  

String1 =" ABCD"和String2 =" EFGH"结果将是:String1 =   " ABCDE"

这是我的代码:

int main(int argc, char *argv[]) 
{   
    char *myChaine1 = (char*)malloc(100);
    char *myChaine2 = (char*)malloc(100);

    myStrCpy("ABCD", myChaine1);
    myStrCpy("EFGH", myChaine2); 

    myStrCat(myChaine1, myChaine2);

    printf("%s", myChaine1);

    free(myChaine1);
    free(myChaine2);
    return 0;
}

// Home made string length function
int myStrLen(const char* word)
{
    int length = 0;
    while (word[length] != '\0')
    {
        length++;
    }
    return length;
}

// Home made Copy string function    
char* myStrCpy(const char* word, char* copy)
{
    int i = 0;
    while (i < myStrLen(word))
    {
        copy[i] = word[i];
        i++;
    }   
}

// Home made concatenate function
char* myStrCat(char* chaine1, const char* chaine2)
{
    int i = 0;
    while (i < myStrLen(chaine2))
    {   
        chaine1[i + myStrLen(chaine1)] = chaine2[i];
        i++;
    }
}

有人知道问题在哪里?

2 个答案:

答案 0 :(得分:2)

正如@WeatherVane建议的那样,我改变了我的功能如下:

char* myStrCat(char* chaine1, const char* chaine2)
{
    int i = 0;
    int lastValue = myStrLen(chaine1);
    while (i < myStrLen(chaine2))
    {   
        chaine1[i + lastValue] = chaine2[i];
        i++;
    }
    chaine1[myStrLen(chaine1)] = '\0';
}

问题出在循环中myStrLen的迭代中。

答案 1 :(得分:1)

不确定答案是什么,但是你的复制或concat例程似乎都没有在输出字符串的末尾写'\ 0'。您可以通过在长度检查中使用&lt; =来更正此问题,或者您可以循环直到获得0个字符,然后在循环之后添加它。