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

#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;
}
请问哪里出问题了,并解释原因
一定要解释原因哦

#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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-13
你犯了两个错误.
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可以运行!

追问

我用的是Turbo C, char *b = new char[20];这句好像不行吧

追答

#include "stdio.h"
#include "string.h"
#include "stdlib.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;
//把b的内存放到堆上去,它的生命周期就全局了.
char *b = (char *)malloc(20);
memset(b, 0, 20);//初始化.
n=strlen(name);
for(i=0;i<n;i++)
b[i]=name[n-1-i];
p=b;
return p;
}

追问

你写的代码很不错,是我想要的
你能帮我看看一楼的代码,它的出了一点问题,就是你输入字符串后看不到结果,系统自动退出
帮帮忙多谢了

追答

#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];
memset(b, 0, 20);//他这里也没有初始化,就是这个问题
n=strlen(name);
for(i=0;i<n;i++)
b[i]=name[n-1-i];
strcpy(name,b);//p=b;//局部变量b是放堆栈的,函数返回后其内存被系统回收。
return name;
}

本回答被提问者和网友采纳
第2个回答  2011-06-06
#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都释放了,返不回去的。

逻辑有问题。
char *p; //不仅这儿少分号,而且p,b都是局总变量,函数调用完毕后释放,主程序不能访问的。
char b[20];
......
return p; //p及p所指的对象b都释放了,返不回去的。

追问

好像还没有实现我说的功能哦

输入字符串后,反向输出
我运行后还是原样输出啊

追答

我机器动迁情况如下:
abcde
edcba请按任意键继续. . .

追问

你能看一下楼上的程序代码吗?不过他写的也有一定的问题,就是输入字符串后按回车键后,系统自动退出,看不到结果

相似回答