鱼C论坛

 找回密码
 立即注册
查看: 2698|回复: 3

一个字符串反转的小程序

[复制链接]
发表于 2012-3-16 14:32:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Rel_Ief 于 2012-3-16 15:43 编辑

复制代码
  1. #include<stdio.h>
  2. void reverse_str(char* buf, int n);
  3. void main()
  4. {
  5.         char* a="abcde";
  6.         reverse_str(a,5);
  7.         printf("%s\n",a);
  8. }
  9. void reverse_str(char* buf, int n)
  10. {
  11.         char tmp= buf[0];
  12.         if(n<2)
  13.                  return;
  14.         buf[0] = buf[n-1];
  15.         buf[n-1] =tmp;
  16.        reverse_str(buf++,n--);
  17. }
复制代码

程序想要实现“abcde”变为“edcba”
编译可以通过,执行却有问题,求助大侠~





                               
登录/注册后可看大图
该贴已经同步到 Rel_Ief的微博



小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-16 16:54:25 | 显示全部楼层
debug了一下

0x00ed1459 处有未经处理的异常: 0xC0000005: 写入位置 0x00ed5740 时发生访问冲突

我猜是这样的:在交换的那个函数里面,buf[0]和buf[n-1],如果把它看成是char * a 和 char * b ,a和b的来源都是buf,程序从buf取出了一个数b也就是buf[n-1](可能也不是取出,只是暂时先锁定了这个buf),要赋值给a也就是buf[0]的时候,发现buf这个指针有冲突了~所以不能赋值。

毕设也写c,所以帮你看了一下。不知道是不是这样,你可以考虑一下。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-16 18:51:46 | 显示全部楼层
  1. #include<stdio.h>
  2. void reverse_str(char* buf, int n);
  3. void main()
  4. {
  5.         //char* a="abcde";
  6.         char a[]="abcde";
  7.         reverse_str(a,5);
  8.         printf("%s\n",a);
  9. }
  10. void reverse_str(char* buf, int n)
  11. {
  12.         char tmp= buf[0];
  13.         if(n<2)
  14.                 return;
  15.         buf[0] = buf[n-1];
  16.         buf[n-1] =tmp;
  17.         //reverse_str(buf++,n--);
  18.         reverse_str(++buf,n-2);
  19. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-3-17 09:56:49 | 显示全部楼层
多谢了  3楼正解
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-12 02:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表