黑马程序员技术交流社区

标题: 指针问题又报错,字符串顺序转换函数报错 [打印本页]

作者: 董月峰    时间: 2014-3-18 16:33
标题: 指针问题又报错,字符串顺序转换函数报错
本帖最后由 董月峰 于 2014-3-24 14:47 编辑

/*
9、 编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)。(C语言)
*/

#include<stdio.h>
#include<string.h>



void trans(int num,int n)
{

   
    if(num==0)
    {
        printf("0的其它进制也是0");
    }
    //字符数组16进制版,2和8进制都可以用
    char chs[] = {'0','1','2','3'
        ,'4','5','6','7'
        ,'8','9','A','B'
        ,'C','D','E','F'};
   
    char *arr;
    //定义base是与num&的数[2进制就是1,8进制就是7,16进制就是15]
    int base = n - 1;
    //offset就是num在后面右移的数字
    int offset;
    if(n == 2)
        offset = 1;
    else if(n == 8)
        offset = 3;
    else
        offset = 4;
  //初始化一个len为0
    int len=0;
    //为字符串赋值,就是要转换成的进制数倒过来的情况
    while(num != 0)
    {
        int temp = num & base;
        arr[++len] = chs[temp];
        num = num >> offset;
    }
    //此处报错format specifies type ‘char *’but the argument has type ‘int’
    printf("转换完为:%s\n",strrev(strdup(arr)));
}

int main()
{
    int num,n;
    printf("请输入一个十进制数字\n");
    scanf("%d",&num);
    printf("请如实想转换成哪种进制的数【填2,8,16】:\n");
    scanf("%d",&n);
    trans(num,n);
    return 0;
}
作者: bubuatt    时间: 2014-3-18 17:40
其实这个有简单的思路,进制转换的公式就是 第N位R^(N)
arr[i]=dec%R;//取模最低位一次放在个位十位..
i++;  
dec=dec/R;
你试试这种循环体
作者: 脸皮猴    时间: 2014-3-18 17:40
        arr[++len] = chs[temp]; // 此处你得arr是一个指针!你的指针没有初始化就是说你的指针根本不知道指向哪里你就向这个指针指向的内存赋值!!这会出大问题!
还有printf("转换完为:%s\n",strrev(strdup(arr)));你这句话完全走网上找到的吧。在xcode上却是确实报错。但是我用cfree不报错。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2