| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 334 人关注过本帖
标题:函数返回值为字符数组地址,却不能输出这个字符数组?
只看楼主 加入收藏
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
结帖率:56.6%
  已结贴   问题点数:2  回复次数:3   
函数返回值为字符数组地址,却不能输出这个字符数组?
这是我自己写的一个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;
}
2018-03-22 21:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:260
帖 子:5791
专家分:33007
注 册:2011-1-18
  得分:2 
函数tentor中你返回的是局部临时变量的地址吧

你的源代码
char* tentor(int r,int num10)
{
    char s[30];
    ……
    char *p=s;
    return p;
}

2018-03-23 08:50
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
  得分:0 
回复 2楼 rjsp
嗯,是局部变量。这就会出问题吗?还请大神指点迷津?
2018-04-14 09:01
Jonny0201
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:20
帖 子:329
专家分:1563
注 册:2016-11-7
  得分:0 
回复 3楼 troyzyc
char *p 指向 c 数组的首地址
而 c 数组在函数终结后会被销毁
也就是 p 指针指向了一个已经被释放的指针
最后把 p 传出来
这个是典型的严重错误
2018-04-14 14:13







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025318 second(s), 9 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved