C 国产串联函数
我正在尝试用C语言创建一个连接函数,我是初学者 但我有一个问题,我的函数只连接第二个字符串的第一个字符,但不适用于所有字符串 例如: String1=“ABCD”和String2=“EFGH”结果将是:String1= “ABCDE” 这是我的代码:C 国产串联函数,c,string,concatenation,c-strings,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);
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++;
}
}
intmain(intargc,char*argv[])
{
char*myChaine1=(char*)malloc(100);
char*myChaine2=(char*)malloc(100);
myStrCpy(“ABCD”,myChaine1);
myStrCpy(“EFGH”,myChaine2);
myStrCat(myChaine1、myChaine2);
printf(“%s”,myChaine1);
免费(myChaine1);
免费(myChaine2);
返回0;
}
//自制字符串长度函数
int myStrLen(const char*word)
{
整数长度=0;
while(单词[长度]!='\0')
{
长度++;
}
返回长度;
}
//自制复制字符串函数
char*myStrCpy(常量char*word,char*copy)
{
int i=0;
而(我
有人知道问题出在哪里了吗?不确定这是否是答案,但您的copy或concat例程似乎都没有在输出字符串的末尾写入“\0”。您可以使用@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';
}
char*myStrCat(char*chaine1,const char*chaine2)
{
int i=0;
int lastValue=myStrLen(链1);
而(我
问题在于循环中myStrLen的迭代。
myStrCpy
和myStrCat
都无法复制(或写入)字符串终止符。它们应该返回一个值,但不返回。它们也都是低效的:myStrLen
只需要调用一次,而不是在每次循环迭代中。感谢您的回答,它现在正在工作:)除了在目标字符串的末尾添加空终止符之外,您的代码还多次调用myStrLen,每次通过循环时都会再次迭代字符串。这是非常低效的。你应该弄清楚如何摆脱这些额外的调用。正如@WeatherVane所说,我将连接函数修改为不在循环中调用myStrLen,但在此之前,我同意只计算一次索引值的方式,因为这使代码更清晰。然而,这并不是一个复杂的问题,因为现代c编译器将优化您的草率编码(当然,除非您关闭优化)。顺便说一句,我看到的修改后的代码似乎仍然没有将终止的0复制到输出字符串中。感谢您的消息,通过我所做的修改,似乎更好了?我在字符串末尾添加了“\0”。。。