cainiao367 发表于 2013-11-16 09:29:33

子函数 && 局部指针

如下子函数:

29 char * reve (char * str,size_t n) {
30         char * locstr;//局部字符串指针
31         int incre;
32         for (incre = 0;incre <= n - 1;incre ++) {
33               locstr = *(str + n - incre);//处故障啦运行后出现core dumped
34         }
35         return locstr;//能返回局部指针吗
36
37 }
有两个大问题要问
FIRST: 第33句在调试的时候发现了问题,这句话有语法错误吗,为什么运行后出现这个错误,
SECOND:第35句是返回了局部指针,这个可以有吗?

friendan 发表于 2013-11-16 09:29:34

看了下你的代码,这不是字符串反转函数的实现么?
根据你的思路,你的代码有些问题,我已修正了,
具体请看我的注释,效果截图如下:


代码如下(望顺便给我加下热心之类的):
#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=' ';//清空,不然第二次调用函数时内容还存在
                }
               
      unsigned incre;
         for (incre=0;incre<n;incre++)
               {
                        locstr= *(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));
}



cyshhm 发表于 2013-11-16 11:45:37

你的变量n 声明了没啊!
没看见你在函数里面声明变量n

my_angel 发表于 2013-11-16 11:52:44

33处语法没错,但是locstr只是指针,你需要对其申请空间后才能这样操作,还有返回局部指针可不可以是要分情况的,当局部指针指向的是堆变量是可以返回的。。。

不抛弃不放弃 发表于 2013-11-16 12:37:28

路过看看,不错不错- -

不抛弃不放弃 发表于 2013-11-16 12:39:02

路过看看,不错不错- -

花开淡墨痕 发表于 2013-11-16 12:50:22

n是从哪冒出来的啊

cainiao367 发表于 2013-11-16 18:09:38

my_angel 发表于 2013-11-16 11:52 static/image/common/back.gif
33处语法没错,但是locstr只是指针,你需要对其申请空间后才能这样操作,还有返回局部指针可不可以是要分情 ...

明白,{:2_27:}

cainiao367 发表于 2013-11-16 19:00:26

friendan 发表于 2013-11-16 09:29 static/image/common/back.gif
看了下你的代码,这不是字符串反转函数的实现么?
根据你的思路,你的代码有些问题,我已修正了,
具体请 ...
static char locstr[]=""; //在堆中分配局部变量
.......
return locstr; //
对于这两句,我认为我如下的也可以
char locstr[];
static char * man;   //用静态字符指针代替静态数组
.....
man = locstr = " ";
return man;   //返回的静态字符指针,
页: [1]
查看完整版本: 子函数 && 局部指针