这段代码应该连接两个字符串,但是我得到了总线错误: 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));
}发布于 2014-04-09 15:34:00
这段代码有一些错误。
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));
}这就像预期的一样。
https://stackoverflow.com/questions/22966341
复制相似问题