请问我这个程序错在哪里?求教,谢谢
#include<iostream.h>#include<string>char*fun(char*s){intm=strlen(s);intn=m;charb[100]...
#include<iostream.h>
#include<string>
char *fun(char *s)
{int m=strlen(s);
int n=m;
char b[100];
for(int i=0;i<m;i++)
{b[n-1]=*s;
s++;n--;}
b[m]='\0';
return b;}
void main()
{cout<<"please"<<endl;
char a[100];
cin>>a;
char *p=fun(a);
cout<<p<<endl;
}
来个高手啊,编译后0错误,1警告,执行也得不到想要的结果 展开
#include<string>
char *fun(char *s)
{int m=strlen(s);
int n=m;
char b[100];
for(int i=0;i<m;i++)
{b[n-1]=*s;
s++;n--;}
b[m]='\0';
return b;}
void main()
{cout<<"please"<<endl;
char a[100];
cin>>a;
char *p=fun(a);
cout<<p<<endl;
}
来个高手啊,编译后0错误,1警告,执行也得不到想要的结果 展开
1个回答
展开全部
在编译的过程中,出现了警告:warning C4172: returning address of local variable or temporary
也就是说,函数的返回值是一个局部变量的地址或者是一个临时变量的地址。这就是程序错误的原因。
这个临时地址指向的内存在执行cout<<p<<endl的过程中,被改写了,所以输出的结果是奇怪的。
解决这个问题的办法有多种,可以把确定的变量地址传到函数中去,也可以用全局变量。这里提供一个办法,用静态变量,其实也相当于全局变量。
将b的定义char b[100]; 改为 static char b[100];就可以了。
也就是说,函数的返回值是一个局部变量的地址或者是一个临时变量的地址。这就是程序错误的原因。
这个临时地址指向的内存在执行cout<<p<<endl的过程中,被改写了,所以输出的结果是奇怪的。
解决这个问题的办法有多种,可以把确定的变量地址传到函数中去,也可以用全局变量。这里提供一个办法,用静态变量,其实也相当于全局变量。
将b的定义char b[100]; 改为 static char b[100];就可以了。
中智咨询
2024-08-28 广告
2024-08-28 广告
在当今竞争激烈的商业环境中,企业需要不断提高自身的竞争力,以保持市场份额和增加利润。通过人效提升,企业可以更有效地利用有限的资源,提高生产力和效益,从而实现盈利目标。中智咨询提供全方位的组织人效评价与诊断、人效提升方案等数据和管理咨询服务。...
点击进入详情页
本回答由中智咨询提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询