#include<stdio.h>
char bin(int);
int main()
{
setbuf(stdout,NULL);
int num;
char res[50];
printf("Enter the number: ");
scanf ("%d",&num);
res=bin(num);
printf("%s",res);
return 0;
}
char bin(int num)
{
char str[50];
int i,val;
for(i=0;num>=0;i++)
{
val=num%2;
str[i]=val;
num=num/2;
}
return str;
}
我真的无法理解字符串使用中的错误...将十进制转换为二进制。我没有遵循的概念错误是什么?
返回str
等于返回局部变量,您不能这样做,可以做的是返回一个指针,该指针指向先前分配的作为数组工作的内存块(作为其他答案的替代方法,这是一个很好的解决方案) 。
为此,您可以声明str
为一个指针,为其分配内存并返回它,确保分配了该值的变量也是一个指针,其余所有都可以保持不变。
但是,该bin
功能存在问题。
str[i] = val;
在分配int
操作结果(将其为1或0)时,这将无法正常工作,您需要将此值转换为相应的字符。
该循环for (i = 0; num >= 0; i++)
是一个无限循环,因为它num
永远不会为负,除非您为其提供负数,否则它将在第一次迭代中中断,也就是说,此代码仅适用于正整数。您需要>
代替>=
。
最后,转换完成后,您需要使字符串终止为空。
更正的代码(在线):
#include <stdio.h>
#include <stdlib.h>
char *bin(int); //return pointer
int main() {
setbuf(stdout, NULL);
int num;
char *res; //use pointer to receive string assignment
printf("Enter the number: ");
scanf("%d", &num);
res = bin(num);
printf("%s", res);
return 0;
}
char *bin(int num) {
char *str = malloc(50); // allocate memory
int i, val;
for (i = 0; num > 0; i++) { // replacing >= with >
val = num % 2;
str[i] = val + '0'; // convert to character
num = num / 2;
}
str[i] = '\0'; //null terminate the string
return str;
}
请注意,您还应该检查输入的值,如果该值大于int
变量可以容纳的值,则将导致不确定的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句