首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公共汽车错误: 10不知道原因

公共汽车错误: 10不知道原因
EN

Stack Overflow用户
提问于 2014-04-09 14:53:25
回答 1查看 111关注 0票数 0

这段代码应该连接两个字符串,但是我得到了总线错误: 10。我已经对它进行了研究,所以我给了t1更多的空间,但我仍然会得到这个错误。你能帮帮我吗?提前感谢!

代码语言:javascript
复制
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));
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-09 15:34:00

这段代码有一些错误。

代码语言:javascript
复制
while (s2[j])
{
    s1[j++] = s2[j++];
}

因为j++在同一行中执行了两次,所以您正在调用undefined behavior。如果我们将j++移动到它自己的行,这种情况就会消失:

代码语言:javascript
复制
while (s2[j])
  {
    s1[j] = s2[j];
    j++;
  }

您的代码还有两个问题。首先,使用一个计数器(i)到达s1的末尾,但在将s2附加到s1时不要使用它。让我们解决这个问题:

代码语言:javascript
复制
while (s2[j])
  {
    s1[i] = s2[j];
    i++;
    j++;
  }

在将尾随\0附加到s1时,我们需要做同样的事情

代码语言:javascript
复制
s1[j] = '\0';

变成了

代码语言:javascript
复制
s1[i] = '\0';

第二个是i中的一个小越位错误。

代码语言:javascript
复制
while (s1[i++]);

如果您在脑海中跟踪这一过程,i++将比您想要的更多地进行评估,在循环结束时将i设为4。但是,此时,s1中只有三个字符:asd。A=字符0,s=字符1,d=字符2。我们想要开始写s2 --超过这个字符,所以我们想从字符3开始写。调整你的循环以匹配,

代码语言:javascript
复制
while (s1[i++]);
i--;

为了清晰起见,您也可以这样做:

代码语言:javascript
复制
while (s1[i])
{
  i++;
}

现在,把它们放在一起:

代码语言:javascript
复制
#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));
}

这就像预期的一样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22966341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档