子函数 && 局部指针
如下子函数: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句是返回了局部指针,这个可以有吗?
看了下你的代码,这不是字符串反转函数的实现么?
根据你的思路,你的代码有些问题,我已修正了,
具体请看我的注释,效果截图如下:
代码如下(望顺便给我加下热心之类的):
#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));
}
你的变量n 声明了没啊!
没看见你在函数里面声明变量n 33处语法没错,但是locstr只是指针,你需要对其申请空间后才能这样操作,还有返回局部指针可不可以是要分情况的,当局部指针指向的是堆变量是可以返回的。。。 路过看看,不错不错- - 路过看看,不错不错- - n是从哪冒出来的啊 my_angel 发表于 2013-11-16 11:52 static/image/common/back.gif
33处语法没错,但是locstr只是指针,你需要对其申请空间后才能这样操作,还有返回局部指针可不可以是要分情 ...
明白,{:2_27:} 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]