error C2660: 'Binary' : function does not take 1 parameters,你声明的时候声明了两个参数,而在调用的时候只传进去了一个参数
warning C4018: '<' : signed/unsigned mismatch 可以忽略这个提醒,意思是<两边一个是有符号整型变量,一个是无符号整型变量
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数组的长度,也就是转化后结果的长度 }
这个代码,看得我都快哭了,很简单的问题,竟然被你弄得这么复杂
#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
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;
}
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这样的缓冲区由函数使用者提供,否则,一个函数分配了内存却不主动释放,很难保证函数使用者会正确使用
建议你不要浮躁,仔细的看下错误原因,能够看出来的,可以自己调试修改。
如果让被人给你解答这种错误,对你以后的发展很不利!
Binary函数少一个参数 在23行调用的时候.
74行 告诉你的, 函数返回类型是 int* 但是你在程序里 返回了 int
34行问题, 最好不要再for循环的判断条件, 使用表达式.
可以改为:
int len = strlen(iBinary);
for(i=0;i
}