黑马程序员技术交流社区

标题: Bus error的错误原因?? [打印本页]

作者: qiuguo    时间: 2014-11-24 22:40
标题: Bus error的错误原因??

这是我写的代码,后面注释了会发生Bus error的情况;不明白为什么??求解?

作者: 时振    时间: 2014-11-25 01:58
本帖最后由 时振 于 2014-11-25 02:28 编辑

亲,这样做可能会出现越界
你可以试试这样,看看可以不?
#include <stdio.h>
void strlink(char x[],char y[]);
int main()
{
char s[]="oabcmnh";
char t[]="pdef";
strlink("abc","def");
strlink("abc","def");
strlink(s,"def");
strlink("abc",t);
return 0;
}

void strlink(char s[],char t[])
{
int i=0,j=0;
char p[20];//定义一个稍大的字符串,当然可能浪费一点点内存
while(s!='\0')
{
  
  p=s;
  i++;
}
while(t[j]!='\0')
{
  p[i+j]=t[j];
  j++;
  p[i+j+1]='\0';//保证能够按连接后的长度正常输出
}
printf("%s\n",p);
//puts(p);
  }
一点自己理解,互相学习

作者: qiuguo    时间: 2014-11-25 09:03
时振 发表于 2014-11-25 01:58
亲,这样做可能会出现越界
你可以试试这样,看看可以不?
#include

嗯,谢谢,我写那个可能是越界,就是不理解为什么越界!是不是传入双引号的字符串,长度固定了,不能再后面接字符串,所以越界。
作者: 时振    时间: 2014-11-25 09:15
本帖最后由 时振 于 2014-11-25 09:25 编辑
qiuguo 发表于 2014-11-25 09:03
嗯,谢谢,我写那个可能是越界,就是不理解为什么越界!是不是传入双引号的字符串,长度固定了,不能再后 ...


恩,我感觉是因为在函数strlink()中系统为s[]内存大小已经分配好了,再链接就会超出它的内存空间,我这样理解的,你可以单步调试看看各个值的变化




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2