【发布时间】:2018-11-26 13:45:14
【问题描述】:
我正在尝试用 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++;
}
}
有人知道问题出在哪里吗?
【问题讨论】:
-
myStrCpy和myStrCat都无法复制(或写入)字符串终止符。他们应该返回一个值,但不要。它们也都是低效的:myStrLen只需要调用一个,而不是在每个循环迭代中。 -
感谢您的回答,现在可以使用了 :)
-
除了将空终止符添加到目标字符串的末尾之外,您的代码还多次调用 myStrLen,每次循环都会再次迭代字符串。这是非常低效的。你应该弄清楚如何摆脱这些额外的调用。
-
正如@WeatherVane 所说,我将连接函数修改为不在循环中调用 myStrLen 而在之前
标签: c string concatenation c-strings