C语言问题,关于地址的,请教了。望高手指教,(回答完好者额外加20~50币),具体在下面:

2024-12-15 07:08:37
推荐回答(5个)
回答1:

  1. error C2660: 'Binary' : function does not take 1 parameters,你声明的时候声明了两个参数,而在调用的时候只传进去了一个参数

  2. warning C4018: '<' : signed/unsigned mismatch 可以忽略这个提醒,意思是<两边一个是有符号整型变量,一个是无符号整型变量

  3. returning address of local variable or temporary 这个提醒很重要,因为你返回的地址arr是一个局部变量的地址,实际上这个变量只在Binary()函数中有用,你返回的地址实际上是没有意义的,不能用作真正的地址。

    可以按照如下修改

    #include

    #include

    #include

    #include


     

    int main()

    {

     int Conversion(char str[],int n);

     int Binary(int,int,int[]);//n是接收到的数,此程序接收的2进制数位正好反了


     

     int iArr[32]={0}; char iBinary[32];

     int _iBinary;

     int jinzhi;

     //int *pBinary;

     int pBinary[32];

     int i;


     

     puts("Please input your data:");

     gets(iBinary);

     _iBinary=Conversion(iBinary,strlen(iBinary));


     if(_iBinary==-1)

     {

      printf("\n\n%c%cError!%c%c\n",4,4,4,4);

      printf("%c%c%c------%c%c%c\nSorry,we need integer,but your input character!\n%c%c%c------%c%c%c\nGoodBye!\n",4,4,4,4,4,4,4,4,4,4,4,4);

      exit(0);

     }

     printf("_iBinary=%d\n",_iBinary);

     printf("您要转化为几位进制数?请输入回答:");

     scanf("%d",&jinzhi);

     int len=Binary(_iBinary,jinzhi,pBinary);

     printf("结果为:");

     //for(i=0;i<(unsigned int)strlen(iBinary);i++)

     for(i = 0;i < len;i ++)

      iArr[i]=pBinary[i];

     //for(i=31;i>=0;i--)

     for(i = len - 1;i >= 0;i --)

     {

      printf("%d",iArr[i]);

      //if(i%4==0)

      // printf("\n");

     }


     

     system("pause");

     return 0;

    }


     

    int Conversion(char str[],int n)

    {

     int i;

     int sum;

     for(i=0;i

      if(str[i]<'0'|| str[i]>'9')

       return -1;

      for(i=0,sum=0;i

      {

       sum=sum*10+(str[i]-'0');

      }

      return sum;

    }


     

    //k是被除数,同时就是被转换的进制数

    int Binary(int n,int k,int res[])//n是接收到的数,此程序接收的2进制数位正好反了

    {

     //k是被除数,同时就是被转换的进制数

     //int arr[32];//接受%的结果,但是实际的2进制数位正好反了

     int j;//j是除数,同时,

     int sum,i;//sum是/的结果,当除数取整得到0时,程序结束;i是循环条件

     j = n;

     res[0] = j % k;

     for(i=1;j / k !=0;i++)

     {

      j=j/k;

      res[i]=j%k;

     }

     return i;//res数组的长度,也就是转化后结果的长度

    }


回答2:

这个代码,看得我都快哭了,很简单的问题,竟然被你弄得这么复杂

#include
#include
#include
#include
int main()
{
int Conversion(char str[],int n);
int *Binary(int,int);

int iArr[32]={0}; char iBinary[32];
int _iBinary;
int jinzhi;
int *pBinary;
int i;

puts("Please input your data:");
gets(iBinary);
_iBinary=Conversion(iBinary,strlen(iBinary));
if(_iBinary==-1)
{
printf("\n\n%c%cError!%c%c\n",4,4,4,4);
printf("%c%c%c------%c%c%c\nSorry,we need integer,but your input character!\n%c%c%c------%c%c%c\nGoodBye!\n",4,4,4,4,4,4,4,4,4,4,4,4);
exit(0);
}
printf("_iBinary=%d\n",_iBinary);
printf("您要转化为几位进制数?请输入回答:");
scanf("%d",&jinzhi);
pBinary=Binary(_iBinary,jinzhi);//
printf("结果为:");
for(i=0;i<32;i++)//
iArr[i]=pBinary[i];
for(i=31;i>=0;i--)
{
printf("%d",iArr[i]);
if(i%4==0)
printf("\040");//
}

system("pause");
return 0;
}
int Conversion(char str[],int n)
{
int i;
int sum;
for(i=0;i if(str[i]<'0'|| str[i]>'9')
return -1;
for(i=0,sum=0;i {
sum=sum*10+(str[i]-'0');
}
return sum;
}
int *Binary(int n,int k)
{
int *arr=(int *)malloc(32*sizeof(int));//
int i;
for(i=0;i<32;i++)//
{
arr[i]=n%k;//
n/=k;//
}
return arr;
}

回答3:

1)警告和错误的原因:
a:23行的错误告诉你说Binary(int,int)函数需要输入两个参数,而你在调用它的时候只提供了一个
b:34行警告的原因是你提供的参数是有符号类型的,而函数本身要求的形参是无符号类型的,转换以后会丢失符号
c:74行的错误在于,arr是Binary函数体内的局部变量,当Binary函数返回时这个变量的生命周期已经结束并且被销毁,如果你试图去使用一个已经被销毁的对象的指针,程序可能会崩溃。解决的办法是,在Binary函数内把arr用maclloc在堆里申请内存,方法为int * arr= (int*)malloc(sizeof(int) * 32),记得当你在使用完这个返回的指针以后要把这个对象销毁(调用free函数),否则程序会引起内存泄露。Binary这个函数最好要求类似arr这样的缓冲区由函数使用者提供,否则,一个函数分配了内存却不主动释放,很难保证函数使用者会正确使用

回答4:

建议你不要浮躁,仔细的看下错误原因,能够看出来的,可以自己调试修改。
如果让被人给你解答这种错误,对你以后的发展很不利!

回答5:

Binary函数少一个参数 在23行调用的时候.

74行 告诉你的, 函数返回类型是 int* 但是你在程序里 返回了 int

34行问题, 最好不要再for循环的判断条件, 使用表达式.
可以改为:
int len = strlen(iBinary);
for(i=0;i...
}