Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c、 使用dec2bin转换器填充阵列_C++_C - Fatal编程技术网

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
,当您完成写入时,do
b[len]=0返回之前。

您的
b
数组不是以0结尾的。你很幸运,你的程序没有崩溃


b
的长度应为
len+1
,当您完成写入时,do
b[len]=0

在这种情况下,不应从函数
b
返回指向局部变量的指针。如果您这样做,则不应取消对它们的引用。如果这样做,就不能保证得到任何有意义的结果,因为局部变量在定义它们的函数末尾不再存在,它们的内存被回收,并且可能被其他变量和事物重用。通过解引用指向不存在对象的指针来读取和写入内存的通常结果是读取垃圾或损坏程序内存中的某些内容(例如,另一个变量)。我认为您不希望这样。在这种情况下,您不应该从函数返回指向局部变量的指针,
b
。如果您这样做,则不应取消对它们的引用。如果这样做,就不能保证得到任何有意义的结果,因为局部变量在定义它们的函数末尾不再存在,它们的内存被回收,并且可能被其他变量和事物重用。通过解引用指向不存在对象的指针来读取和写入内存的通常结果是读取垃圾或损坏程序内存中的某些内容(例如,另一个变量)。我想你不想那样。