C语言写用一个函数实现字符串数组的倒序输出,返回字符串 下面是我写的程序

#include"stdio.h"#include"string.h"char*output(charname[]);main(){charname[20];scanf(... #include "stdio.h"
#include "string.h"
char *output(char name[]);
main()
{
char name[20];
scanf("%s",name);
printf("%s",output(name));
}
char *output(char name[])
{
int i,n;
char *p
char b[20];
n=strlen(name);
for(i=0;i<n;i++)
b[i]=name[n-1-i];
p=b;
return p;
}
请问哪里出问题了,并解释原因
一定要解释原因哦
展开
 我来答
味琴物6024
2011-06-06 · TA获得超过6万个赞
知道大有可为答主
回答量:3.5万
采纳率:0%
帮助的人:5023万
展开全部
#include "stdio.h"
#include "string.h"
char *output(char name[]);
main()
{
char name[20];
scanf("%s",name);
printf("%s",output(name));
}
char *output(char name[])
{
int i,n;
char *p
char b[20];
n=strlen(name);
for(i=0;i<n;i++)
b[i]=name[n-1-i];
strcpy(name,b);//p=b;//局部变量b是放堆栈的,函数返回后其内存被系统回收。
return name;
}
dengniyiqianni
推荐于2018-04-13 · TA获得超过316个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:318万
展开全部
你犯了两个错误.
1.b的生命周期只是output函数,当运行到printf的时候,b的内存已经被系统回收了,所以p指向地的一块无效的内存.
2.b应该被初始化.申请b的时候,它里面的内容不确定,而printf会逐个输出字符直到遇到结束符'\0'.
我修改后是这样的.
#include "stdio.h"
#include "string.h"
char *output(char name[]);
main()
{
char name[20];
scanf("%s",name);
printf("%s\n",output(name));
}
char *output(char name[])
{
int i,n;
char *p;
char *b = new char[20];//把b的内存放到堆上去,它的生命周期就全局了.
memset(b, 0, 20);//初始化.
n=strlen(name);
for(i=0;i<n;i++)
b[i]=name[n-1-i];
p=b;
return p;
}
更多追问追答
追问
我说的是用C 编	char *b=new char[20];能行吗? 你这好像还有错误吧
追答
在我的机上VC6.0可以运行!
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
2011-06-06 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4522万
展开全部
#include "stdio.h"
#include "string.h"
char *output(char name[]);
void main()
{
char name[20];
scanf("%s",name);
printf("%s",output(name));
}
char *output(char name[])
{
int i,n;
char p;
n=strlen(name);
for(i=0;i<n/2;i++)
{
p=name[i];
name[i]=name[n-1-i];
name[n-1-i]=p;
}
return name;
}
更多追问追答
追问
我写的代码怎么不行呢?请解答多谢了
追答
逻辑有问题。
char *p; //不仅这儿少分号,而且p,b都是局总变量,函数调用完毕后释放,主程序不能访问的。
char b[20];
......
return p; //p及p所指的对象b都释放了,返不回去的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式