函数返回值为字符数组地址,却不能输出这个字符数组?
这是我自己写的一个p进制的s,转换为r进制数值的程序。在10进制转为r进制后得到的是s[]字符数组形式的数值。我用指针返回到主函数中的指针变量q中,但是输出q却不能将传来的字符数组s[]输出完整?这是为什么?#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int pto10(int p,char *s) //p进制的字符串s 化为10进制数字,放在m返回
{
int i;
int len=strlen(s);
int k=1; //起初k为0次方,即1
int m=0; //m放转换为十进制的数
for(i=len-1;i>=0;i--)
{
if(s[i]<='9') //再ASCII表中,数字的ASCII码小于字符
{
m=m+(s[i]-'0')*k;
}
else //如果大于十进制,如16进制转换为10进制
{
m=m+(s[i]-'A'+10)*k;
}
k=k*p; //最后一位乘p的0次方,...第一位乘p的n-1(这里就是len)次方
}
return m;
}
char* tentor(int r,int num10) //r进制数值转换为10进制数值
{
char s[30];
int n; //余数
int i=0;
while(num10>0)
{
n=num10%r; //求得的余数n是依次是A0,A1,A2...
if(n>=10)
s[i++]=n-10+'A';
else
s[i++]=n+'0';
num10=num10/r;
}
s[i]='\0';
// int lens=strlen(s);
// for(i=lens-1;i>=0;i--) //倒着输出r进制的字符才是正确的r数值
// cout<<s[i];
char *p=s;
return p;
}
int main()
{
int p,r;
int num10,numr; //分别为化为10进制的数值,化为r进制的数值
char s[20]; //p进制数值
cin>>p>>s;
cin>>r;
//p进制转换为10进制数值
num10=pto10(p,s);
cout<<p<<"进制转换为10进制的数值为:"<<num10<<endl;
//10进制转换为r进制数值
char *q=tentor(r,num10);
// q[3]='\0';
cout<<q<<endl;
return 0;
}