A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qiuguo 中级黑马   /  2014-11-24 22:40  /  2062 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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

3 个回复

倒序浏览
本帖最后由 时振 于 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);
  }
一点自己理解,互相学习
回复 使用道具 举报
时振 发表于 2014-11-25 01:58
亲,这样做可能会出现越界
你可以试试这样,看看可以不?
#include

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


恩,我感觉是因为在函数strlink()中系统为s[]内存大小已经分配好了,再链接就会超出它的内存空间,我这样理解的,你可以单步调试看看各个值的变化
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马