免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1308 | 回复: 6
打印 上一主题 下一主题

谁能帮我调试一下这段代码?(在线等) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-09 22:22 |只看该作者 |倒序浏览
#include <stdio.h>
char *strrev(char *string);

int main(void)
{
   printf(strrev("ABC"));
   printf("\n");

   printf(strrev("abcdefghijklmnopqrstuvwxyz"));
   printf("\n");

   return 0;
}
char *strrev(char *string)
{
   char *original = string;
   char *forward = string;

   char temp;

   while (*string)
     string++;

   while (forward < string)
    {
      temp = *(--string);
      *string = *forward;
      *forward++ = temp;
    }
  return(original);
}
我是用ee编辑gcc4.1编译的:
# cc -Wall -Werror strrev.c -o strrev
# ./strrev
结果:
Bus error (core dumped)

请问是什么地方有错,急在线等

论坛徽章:
0
2 [报告]
发表于 2006-08-09 22:46 |只看该作者
兄弟
你传进来的是常量字符串,也就是const的
你在函数里对它进行了修改,当然出错

你定义一个非const的字符串看看
估计就对了

论坛徽章:
0
3 [报告]
发表于 2006-08-09 22:51 |只看该作者
这里在运行时出现错误:*string = *forward;

传进来的“ABC”,是位于全局常量区,此处内容不允许程序修改。所以向原'C'的地方写'A'就出错了。
如果在main中开辟栈空间
char a[] = "ABC";
再printf(strrev(a));
就没问题了。

原帖由 wateryun 于 2006-8-9 22:22 发表
#include <stdio.h>
char *strrev(char *string);

int main(void)
{
   printf(strrev("ABC"));
   printf("\n");

   printf(strrev("abcdefghijklmnopqrstuvwxyz&quo ...

论坛徽章:
0
4 [报告]
发表于 2006-08-09 23:19 |只看该作者

非常感谢kuaizaifeng,doich

问题解决了,顺便问一句用什么编辑器比较好(vi,emacs,vim。。。),多谢!!!!!

论坛徽章:
0
5 [报告]
发表于 2006-08-09 23:27 |只看该作者
我个人喜欢emacs,但看这里的老鸟很多都喜欢vim。看个人喜好了。

原帖由 wateryun 于 2006-8-9 23:19 发表
问题解决了,顺便问一句用什么编辑器比较好(vi,emacs,vim。。。),多谢!!!!!

论坛徽章:
0
6 [报告]
发表于 2006-08-10 00:06 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2006-08-10 10:07 |只看该作者
原帖由 kuaizaifeng 于 2006-8-9 22:46 发表
兄弟
你传进来的是常量字符串,也就是const的
你在函数里对它进行了修改,当然出错

你定义一个非const的字符串看看
估计就对了

呵呵,正解,楼主估计还没深刻理解堆栈的区别
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP