我正在尝试用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++;
}
}
有人知道问题在哪里?
答案 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个字符,然后在循环之后添加它。