鱼C论坛

 找回密码
 立即注册
查看: 2876|回复: 8

子函数 && 局部指针

[复制链接]
发表于 2013-11-16 09:29:33 | 显示全部楼层 |阅读模式
4鱼币
如下子函数:

29 char * reve (char * str,size_t n) {
30         char * locstr;  //局部字符串指针
31         int incre;
32         for (incre = 0;incre <= n - 1;incre ++) {
33                 locstr[incre] = *(str + n - incre);//处故障啦  运行后出现  core dumped
34         }
35         return locstr;  //能返回局部指针吗
36
37 }

有两个大问题要问
FIRST: 第33句在调试的时候发现了问题,这句话有语法错误吗,为什么运行后出现这个错误,
SECOND:第35句是返回了局部指针,这个可以有吗?


最佳答案

查看完整内容

看了下你的代码,这不是字符串反转函数的实现么? 根据你的思路,你的代码有些问题,我已修正了, 具体请看我的注释,效果截图如下: 代码如下(望顺便给我加下热心之类的):
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-16 09:29:34 | 显示全部楼层
看了下你的代码,这不是字符串反转函数的实现么?
根据你的思路,你的代码有些问题,我已修正了,
具体请看我的注释,效果截图如下:
1.png

代码如下(望顺便给我加下热心之类的):
#include <stdio.h>
#include<string.h>

//字符串反转函数,n是字符串长度
char *reve (char *str,int n) 
{
        static char locstr[]=""; //在堆中分配局部变量
                for(int i=0;i<strlen(locstr);i++)
                {
                        locstr[i]=' ';//清空,不然第二次调用函数时内容还存在
                }
                
        unsigned incre;
         for (incre=0;incre<n;incre++) 
                 {
                        locstr[incre]= *(str+n-1-incre);//最后一个字符是str+n-1
         }
         return locstr; //能返回局部指针吗?
                                                //一般的局部变量在函数调用完后会被释放,返回有用吗?当然不能返回啦。
                                                //因为局部变量默认是存放在栈中的,
                                                //在局部变量定义前面放个修饰符static
                                                //局部变量就不是放在栈中了,这样函数调用完后,局部变量还是
                                                //存在的,当然可以返回啦。
}

void main ()
{
        char *s="baidu";
        printf("%s反转后为:%s\n",s,reve(s,5));
        s="abcdefg";
        printf("%s反转后为:%s\n",s,reve(s,7));
        s="google";
        printf("%s反转后为:%s\n",s,reve(s,6));
}

评分

参与人数 1鱼币 +2 收起 理由
cainiao367 + 2 很热心,灰常不错

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-16 11:45:37 | 显示全部楼层
你的变量n 声明了没啊!
没看见你在函数里面声明变量n
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-16 11:52:44 | 显示全部楼层
33处语法没错,但是locstr只是指针,你需要对其申请空间后才能这样操作,还有返回局部指针可不可以是要分情况的,当局部指针指向的是堆变量是可以返回的。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-16 12:37:28 | 显示全部楼层
路过看看,不错不错- -
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-16 12:39:02 | 显示全部楼层
路过看看,不错不错- -
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-16 12:50:22 | 显示全部楼层
n是从哪冒出来的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-16 18:09:38 | 显示全部楼层

明白,{:2_27:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-16 19:00:26 | 显示全部楼层
friendan 发表于 2013-11-16 09:29
看了下你的代码,这不是字符串反转函数的实现么?
根据你的思路,你的代码有些问题,我已修正了,
具体请 ...

static char locstr[]=""; //在堆中分配局部变量
.......
return locstr; //
对于这两句,我认为我如下的也可以
char locstr[];
static char * man;   //用静态字符指针代替静态数组
.....
man = locstr = " ";
return man;     //返回的静态字符指针,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-25 10:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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