关于返回指针地址的问题

tangxuankai 2008-11-24 02:06:37
#include<stdio.h>
char* fangxu(char *s1)
{
char a[50];
char *q;
int i=0,j;

while(*s1)
{
s1++;
i++;
}
s1--;

for(j=0;i>0;i--,j++)
{
a[j]=*s1;
s1--;
}
a[j]=0;
q=a;
//如果在这里加个printf("%s\n",q); 打印出来的是反序后的字符串啊
return q;
}

void main(void)
{
char b[50];
printf("请输入一串字符串:");
gets(b);
printf("反序后:");
printf("%s\n",fangxu(b)); //为什么这里什么也没打印出来?难道没返回指针地址吗?

}
...全文
149 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxgamexx 2008-11-25
  • 打赏
  • 举报
回复
哦 粗心了~
tangxuankai 2008-11-24
  • 打赏
  • 举报
回复
csdn上的好人真多~~呵呵,谢谢大家的意见了~~返回局部变量这个问题先不去想了,我用了另外个方法进行反序~~
char* fangxu(char *s1)
{

int i=0,j=0;
char *str,temp;
str=s1;
i=strlen(s1);
str=str+i-1;

for(i=i/2;i>0;i--)
{
temp=*s1;
*s1=*str;
*str=temp;
str--;
s1++;
j++;
}
s1=s1-j;

return s1;
}

void bawu(void)
{
char b[50];
printf("请输入一串字符串:");
gets(b);
printf("反序后:");
printf("%s\n",fangxu(b));

}
liangkaiyu 2008-11-24
  • 打赏
  • 举报
回复
改为:
char *a=(char *)malloc(50*sizeof(char));
liangkaiyu 2008-11-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 tangxuankai 的回复:]
刚刚用了下9楼的代码,好像也不行啊~~我在好好想想~~现在对局部变量这一块还不怎么熟
[/Quote]


char* fangxu(char *s1)
{
char a=(char *)malloc(50*sizeof(char));
char *q;
int i=0,j;...




改为:
char a=(char *)malloc(50*sizeof(char));

yangkunhenry 2008-11-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 tangxuankai 的回复:]
刚刚用了下9楼的代码,好像也不行啊~~我在好好想想~~现在对局部变量这一块还不怎么熟
[/Quote]
可以的,改了下……
#include<malloc.h>
char *a=(char *)malloc(50*sizeof(char));
分配在堆上的空间必须手动释放,机器不会给你释放的,因此可以保存到最后
注意用free释放
tangxuankai 2008-11-24
  • 打赏
  • 举报
回复
刚刚用了下9楼的代码,好像也不行啊~~我在好好想想~~现在对局部变量这一块还不怎么熟
dingyin44 2008-11-24
  • 打赏
  • 举报
回复
while(*s1!='\0') 
{
s1++;
i++;
}
s1--;

s1 += strlen(s1)
xxgamexx 2008-11-24
  • 打赏
  • 举报
回复
小米那样做也可以

用了一个全局变量! 不过最好少用全局变量哈!!
xxgamexx 2008-11-24
  • 打赏
  • 举报
回复
老问题了,返回局部变量~

帮你改了下

#include <stdio.h>
char* fangxu(char *s1)
{
char a=(char *)malloc(50*sizeof(char));
char *q;
int i=0,j;

while(*s1!='\0')
{
s1++;
i++;
}
s1--;

for(j=0;i>0;i--,j++)
{
a[j]=*s1;
s1--;
}
a[j]='\0';
q=a;
return q;
}

void main(void)
{
char b[50];
char *pt=NULL;
printf("请输入一串字符串:");
gets(b);
printf("反序后:");
pt=fangxu(b);
printf("%s\n",pt);
free(pt);


}
tangxuankai 2008-11-24
  • 打赏
  • 举报
回复
这么说在函数里定义个数组来存放反序后的字符串是不行的咯?
mifeixq 2008-11-24
  • 打赏
  • 举报
回复
#include <stdio.h>

char a[50]; //不要使用局部数组
char *q; //不要使用局部指针


char* fangxu(char *s1)
{
int i=0,j;

while(*s1)
{
s1++;
i++;
}
s1--;

for(j=0;i>0;i--,j++)
{
a[j]=*s1;
s1--;
}
a[j]=0;
q=a;
//如果在这里加个printf("%s\n",q); 打印出来的是反序后的字符串啊
return q;
}

void main(void)
{
char b[50];
printf("请输入一串字符串:");
gets(b);
printf("反序后:");
printf("%s\n",fangxu(b)); //为什么这里什么也没打印出来?难道没返回指针地址吗?

}
cyj626 2008-11-24
  • 打赏
  • 举报
回复
char a[50];
q=a;
return q;


看见了吧
xmczr 2008-11-24
  • 打赏
  • 举报
回复
q是一个局部变量,在fangxu(b)时由内核释放掉了,此时的返回值只是一个用过了的无效的地址,当然不能得到相应的内容。

这是变量作用域的问题 !
就呆在云上 2008-11-24
  • 打赏
  • 举报
回复
还有你返回了a的地址,a是一个数组,自动变量在函数返回之后就啥玩意可能都没有了
bencharluo 2008-11-24
  • 打赏
  • 举报
回复
局部,相当于没有返回啊
  • 打赏
  • 举报
回复
while(*s1)
{
s1++;
i++;
}
s1--;

???
就呆在云上 2008-11-24
  • 打赏
  • 举报
回复
google一下野指针的问题呵呵
很简单的,不是大问题

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧