C++ c、 使用dec2bin转换器填充阵列
我试图将十进制转换为二进制,但得到了意外的结果 下面的代码返回C++ c、 使用dec2bin转换器填充阵列,c++,c,C++,C,我试图将十进制转换为二进制,但得到了意外的结果 下面的代码返回00000000000000000000000010ÔýDv 而不是00000000000000000010 #include <stdio.h> #include <string.h> char *bin(long dec, long len); main(){ bin(2,32); return 0; } char *bin(long dec, long len){ int c
00000000000000000000000010ÔýDv
而不是00000000000000000010
#include <stdio.h>
#include <string.h>
char *bin(long dec, long len);
main(){
bin(2,32);
return 0;
}
char *bin(long dec, long len){
int c=0;
char tmp[len],b[len];
memset(tmp, '0', len);
memset(b, '0', len);
if(dec==0){c++;}
while(dec>0){
tmp[c++]=0x30+(dec%2);
dec/=2;
}
while(c>0){b[len-c]=tmp[--c];}
puts(b);
return b;
}
#包括
#包括
char*bin(长dec,长len);
main(){
bin(2,32);
返回0;
}
字符*bin(长十二月,长透镜){
int c=0;
字符tmp[len],b[len];
memset(tmp,'0',len);
memset(b,'0',len);
如果(dec==0){c++;}
而(12月>0日){
tmp[c++]=0x30+(十二月%2);
dec/=2;
}
而(c>0){b[len-c]=tmp[--c];}
出售(b);
返回b;
}
请帮帮我吧这仅仅是因为您的
字符b[32]
正好有32个字符长,并且您用'0'
或'1'
填充所有32个字符。当涉及到put(b)
时,它需要一个以零结尾的字符串作为参数。由于数组中没有零,它只会在32位之后溢出并打印无意义的字符。这仅仅是因为字符b[32]
的长度正好是32个字符,您用'0'
或'1'
填充所有32个字符。当涉及到put(b)
时,它需要一个以零结尾的字符串作为参数。由于数组中没有零,它只会在32位之后溢出并打印无意义的内容。您的b
数组不是以0结尾的。你很幸运,你的程序没有崩溃
b
的长度应为len+1
,当您完成写入时,dob[len]=0代码>返回之前。您的b
数组不是以0结尾的。你很幸运,你的程序没有崩溃
b
的长度应为len+1
,当您完成写入时,dob[len]=0返回它之前,请先执行代码>。在这种情况下,不应从函数b
返回指向局部变量的指针。如果您这样做,则不应取消对它们的引用。如果这样做,就不能保证得到任何有意义的结果,因为局部变量在定义它们的函数末尾不再存在,它们的内存被回收,并且可能被其他变量和事物重用。通过解引用指向不存在对象的指针来读取和写入内存的通常结果是读取垃圾或损坏程序内存中的某些内容(例如,另一个变量)。我认为您不希望这样。在这种情况下,您不应该从函数返回指向局部变量的指针,b
。如果您这样做,则不应取消对它们的引用。如果这样做,就不能保证得到任何有意义的结果,因为局部变量在定义它们的函数末尾不再存在,它们的内存被回收,并且可能被其他变量和事物重用。通过解引用指向不存在对象的指针来读取和写入内存的通常结果是读取垃圾或损坏程序内存中的某些内容(例如,另一个变量)。我想你不想那样。