这是我尝试过的,我的逻辑是我的tmp
左移31次将与用户输入整数I
进行比较,并且将插入值1或0索引str[0]
- > str[31]
和I null终止str[32]
与\0
。
但是,我遇到了分段错误。
P.S。我不允许更改此功能的参数,我的教授将str
的大小设置为主要的33,我也不允许更改。
void int2bitstr(int I, char *str) {
int tmp = 1 << 31;
do{
*str++ = !!(tmp & I) + '0';
} while(tmp >>= 1);
*str = '\0';
}
答案 0 :(得分:1)
尝试tmp
unsigned int
。右移负(有符号)整数的行为是实现定义的,在你的情况下可能会以1s(原始MSB)移位,从而导致循环超过str
的长度。