这段代码应该连接2个字符串,但是我收到了总线错误:10。我已经研究过它,所以我给了t1更多的空间,但我还是得到了这个错误。你能帮我吗? 提前谢谢!
char *strCat (char s1[], char s2[])
{
int i=0,j=0;
while (s1[i++]);
while (s2[j])
{
s1[j++] = s2[j++];
}
s1[j] = '\0';
return s1;
}
int main()
{
char t1[10] = "asd";
char t2[] = "fgh";
printf("%s", strCat(t1,t2));
}
答案 0 :(得分:2)
这段代码存在一些问题。
while (s2[j])
{
s1[j++] = s2[j++];
}
由于j++
在同一行中执行了两次,因此您正在调用undefined behavior。如果我们将j++
移动到它自己的行:
while (s2[j])
{
s1[j] = s2[j];
j++;
}
您的代码还有两个问题。首先,您使用一个计数器(i
)到达s1
的末尾,但在将s2
追加到s1
时不要使用它。我们来解决这个问题:
while (s2[j])
{
s1[i] = s2[j];
i++;
j++;
}
将\0
追加到s1
时,我们需要做同样的事情:
s1[j] = '\0';
变为
s1[i] = '\0';
其次是i
的一个小错误。
while (s1[i++]);
如果您在心理上追踪这一点,i++
将会比您想要的更多次评估,当循环结束时将i
置于4。但是,此时s1
:asd
中只有三个字符。 a =字符0,s =字符1,d =字符2.我们想要开始在s2
之后写一个字符,所以我们要从字符 3 开始写字。调整循环以匹配,
while (s1[i++]);
i--;
为了清楚起见,您也可以这样做:
while (s1[i])
{
i++;
}
现在,把它们放在一起:
#include <iostream>
char *strCat(char s1[], char s2[])
{
int i = 0, j = 0;
while (s1[i])
{
i++;
}
while (s2[j])
{
s1[i] = s2[j];
i++;
j++;
}
s1[i] = '\0';
return s1;
}
int main()
{
char t1[10] = "asd";
char t2[] = "fgh";
printf("%s", strCat(t1, t2));
}
这可以按预期工作。