【发布时间】:2018-03-01 19:02:20
【问题描述】:
这是我尝试过的,我的逻辑是我的tmp 左移 31 次将与用户输入的整数 I 进行比较,并将值 1 或 0 插入到索引 str[0] - > str[31] 和 I null 以 \0 终止 str[32]。
但是,我遇到了分段错误。
附:我不允许更改此函数的参数,我的教授主要将str 的大小设置为 33,我也不允许更改。
void int2bitstr(int I, char *str) {
int tmp = 1 << 31;
do{
*str++ = !!(tmp & I) + '0';
} while(tmp >>= 1);
*str = '\0';
}
【问题讨论】:
-
int已签名。你忘记了吗? -
我总是使用Valgrind 来理解段错误
-
基于 Eugene 所说的,如果您在每次迭代时将
tmp的值打印到控制台,我认为您会对您的输出感到惊讶,特别是考虑到您的循环退出子句。 -
@HansPetterTaugbølKragset 我让程序工作,我实际上是 c 新手,从未听说过 valgrind;谢谢你的建议,我会记住的!