你犯了两个错误.
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
p=b;
return p;
}